狠狠操夜夜甜|人妻在线中文字幕亚洲无码不卡av|一区二区欧美亚洲|日躁夜躁狠狠躁2001|亚洲,超碰,欧美|18AV成人电影|午夜成人免费在线|婷婷激情网深爱五月|色欲综合成人在线|在线美女搞黄大片

中企動(dòng)力 > 頭條 > python獲取數(shù)據(jù)

網(wǎng)站性能檢測評分

注:本網(wǎng)站頁面html檢測工具掃描網(wǎng)站中存在的基本問題,僅供參考。

python獲取數(shù)據(jù)

Python實(shí)現(xiàn)數(shù)據(jù)可視化,看如何監(jiān)控你的爬蟲 公司視頻課程

好,開始今天的文章。

今天主要是來說一下怎么可視化來監(jiān)控你的爬蟲的狀態(tài)。

相信大家在跑爬蟲的過程中,也會(huì)好奇自己養(yǎng)的爬蟲一分鐘可以爬多少頁面,多大的數(shù)據(jù)量,當(dāng)然查詢的方式多種多樣。今天我來講一種可視化的方法。

關(guān)于爬蟲數(shù)據(jù)在mongodb里的版本我寫了一個(gè)可以熱更新配置的版本,即添加了新的爬蟲配置以后,不用重啟程序,即可獲取剛剛添加的爬蟲的狀態(tài)數(shù)據(jù)。

1.成品圖

這個(gè)是監(jiān)控服務(wù)器網(wǎng)速的最后成果,顯示的是下載與上傳的網(wǎng)速,單位為M。爬蟲的原理都是一樣的,只不過將數(shù)據(jù)存到InfluxDB的方式不一樣而已, 如下圖。

可以實(shí)現(xiàn)對爬蟲數(shù)量,增量,大小,大小增量的實(shí)時(shí)監(jiān)控。

2. 環(huán)境

InfluxDb,是目前比較流行的時(shí)間序列數(shù)據(jù)庫;

Grafana,一個(gè)可視化面板(Dashboard),有著非常漂亮的圖表和布局展示,功能齊全的度量儀表盤和圖形編輯器,支持Graphite、zabbix、InfluxDB、Prometheus和OpenTSDB作為數(shù)據(jù)源

Ubuntu

influxdb(pip install influxdb)

Python 2.7

3. 原理

獲取要展示的數(shù)據(jù),包含當(dāng)前的時(shí)間數(shù)據(jù),存到InfluxDb里面,然后再到Grafana里面進(jìn)行相應(yīng)的配置即可展示;

4. 安裝

4.1 Grafana安裝

官方安裝指導(dǎo)

安裝好以后,打開本地的3000端口,即可進(jìn)入管理界面,用戶名與密碼都是admin。

4.2 InfulxDb安裝

這個(gè)安裝就網(wǎng)上自己找吧,有很多的配置我都沒有配置,就不在這里誤人子弟了。

5. InfluxDb簡單操作

碰到了數(shù)據(jù)庫,肯定要把增刪改查學(xué)會(huì)了啊, 和sql幾乎一樣,只有一絲絲的區(qū)別,具體操作,大家可以參考官方的文檔。

influx 進(jìn)入命令行

CREATE DATABASE test 創(chuàng)建數(shù)據(jù)庫

show databases 查看數(shù)據(jù)庫

use test 使用數(shù)據(jù)庫

show series 看表

select * from table_test 選擇數(shù)據(jù)

DROP MEASUREMENT table_test 刪表

6. 存數(shù)據(jù)

InfluxDb數(shù)據(jù)庫的數(shù)據(jù)有一定的格式,因?yàn)槲叶际抢胮ython庫進(jìn)行相關(guān)操作,所以下面將在python中的格式展示一下:

其中:

measurement, 表名

time,時(shí)間

tags,標(biāo)簽

fields,字段

可以看到,就是個(gè)列表里面,嵌套了一個(gè)字典。其中,對于時(shí)間字段,有特殊要求,可以參考這里, 下面是python實(shí)現(xiàn)方法:

所以,到這里,如何將爬蟲的相關(guān)屬性存進(jìn)去呢?以MongoDB為例

完整代碼,關(guān)注上面的公眾號(hào),發(fā)送“”可視化“”即可獲取。

那么現(xiàn)在我們已經(jīng)往數(shù)據(jù)里存了數(shù)據(jù)了,那么接下來要做的就是把存的數(shù)據(jù)展示出來。

7.展示數(shù)據(jù)

7.1 配置數(shù)據(jù)源

以admin登錄到Grafana的后臺(tái)后,我們首先需要配置一下數(shù)據(jù)源。點(diǎn)擊左邊欄的最下面的按鈕,然后點(diǎn)擊DATA SOURCES,這樣就可以進(jìn)入下面的頁面:

點(diǎn)擊ADD DATA SOURCE,進(jìn)行配置即可,如下圖:

其中,name自行設(shè)定;Type 選擇InfluxDB;url為默認(rèn)的http://localhost:8086, 其他的因?yàn)槲仪懊鏇]有進(jìn)行配置,所以默認(rèn)的即可。然后在InfluxDB Details里的填入Database名,最后點(diǎn)擊測試,如果沒有報(bào)錯(cuò)的話,則可以進(jìn)入下一步的展示數(shù)據(jù)了;

7.2 展示數(shù)據(jù)

點(diǎn)擊左邊欄的+號(hào),然后點(diǎn)擊GRAPH

接著點(diǎn)擊下圖中的edit進(jìn)入編輯頁面:

從上圖中可以發(fā)現(xiàn):

中間板塊是最后的數(shù)據(jù)展示

下面是數(shù)據(jù)的設(shè)置項(xiàng)

右上角是展示時(shí)間的設(shè)置板塊,在這里可以選擇要展示多久的數(shù)據(jù)

7.2.1 配置數(shù)據(jù)

在Data Source中選擇剛剛在配置數(shù)據(jù)源的時(shí)候配置的NAME字段,而不是database名。

接著在下面選擇要展示的數(shù)據(jù)??粗秃苁煜な遣皇牵耆莝ql語句的可視化。同時(shí),當(dāng)我們的數(shù)據(jù)放到相關(guān)的字段上的時(shí)候,雙擊,就會(huì)把可以選擇的項(xiàng)展示出來了,我們要做的就是直接選擇即可;

設(shè)置右上角的時(shí)間,則可以讓數(shù)據(jù)實(shí)時(shí)進(jìn)行更新與展示

因?yàn)橄旅娴呐渲脤?shí)質(zhì)就是sql查詢語句,所以大家按照自己的需求,進(jìn)行選擇配置即可,當(dāng)配置完以后,就可以在中間的面板里面看到數(shù)據(jù)了。

8. 總結(jié)

到這里,本篇文章就結(jié)束了。其中,對于Grafana的操作我沒有介紹的很詳細(xì),因?yàn)楸酒饕v的是怎么利用這幾個(gè)工具完成我們的任務(wù)。

同時(shí),里面的功能確實(shí)很多,還有可以安裝的插件。我自己目前還是僅僅對于用到的部分比較了解,所以大家可以查詢官方的或者別的教程資料來對Grafana進(jìn)行更深入的了解,制作出更加好看的可視化作品來。

文末知識(shí)點(diǎn)摘要①:sql中dateiff函數(shù)的用法

DATEDIFF

返回跨兩個(gè)指定日期的日期和時(shí)間邊界數(shù)。

一、 語法

DATEDIFF ( datepart , startdate , enddate )

二、參數(shù)

datepart

是規(guī)定了應(yīng)在日期的哪一部分計(jì)算差額的參數(shù)。下表列出了 Microsoft SQL Server? 識(shí)別的日期部分和縮寫。

日期部分 縮寫

year yy, yyyy

quarter qq, q

Month mm, m

dayofyear dy, y

Day dd, d

Week wk, ww

Hour hh

minute mi, n

second ss, s

millisecond ms

startdate

是計(jì)算的開始日期。startdate 是返回 datetime 或 smalldatetime 值或日期格式字符串的表達(dá)式。

因?yàn)?smalldatetime 只精確到分鐘,所以當(dāng)用 smalldatetime 值時(shí),秒和毫秒總是 0。

如 果您只指定年份的最后兩位數(shù)字,則小于或等于"兩位數(shù)年份截止期"配置選項(xiàng)的值的最后兩位數(shù)字的數(shù)字所在世紀(jì)與截止年所在世紀(jì)相同。大于該選項(xiàng)的值的最后 兩位數(shù)字的數(shù)字所在世紀(jì)為截止年所在世紀(jì)的前一個(gè)世紀(jì)。例如,如果 two digit year cutoff 為 2049(默認(rèn)),則 49被解釋為 2049,2050 被解釋為 1950。為避免模糊,請使用四位數(shù)的年份。

enddate

是計(jì)算的終止日期。enddate 是返回 datetime 或 smalldatetime 值或日期格式字符串的表達(dá)式。

三、返回類型

integer

四、用法

此函數(shù)計(jì)算兩個(gè)指定日期之間日期部分的數(shù)目。結(jié)果為日期部分中等于(date2 - date1)的有符號(hào)的整數(shù)值。

當(dāng)結(jié)果不是日期部分的偶數(shù)倍時(shí),DATEDIFF 將被截?cái)喽皇潜簧崛搿?/p>

當(dāng)使用 day 作為日期部分時(shí),DATEDIFF 返回兩個(gè)指定的時(shí)間之間(包括第二個(gè)日期但不包括第一個(gè)日期)的午夜數(shù)。

當(dāng)使用 month 作為日期部分時(shí),DATEDIFF 返回兩個(gè)日期之間(包括第二個(gè)日期但不包括第一個(gè)日期)出現(xiàn)的月的第一天的數(shù)目。

當(dāng)使用 week 作為日期部分時(shí),DATEDIFF 返回兩個(gè)日期(包括第二個(gè)日期但不包括第一個(gè)日期)之間星期日的數(shù)目。

對于更小的時(shí)間單位存在溢出值:

milliseconds 24 天

seconds 68 年

minutes 4083 年

others 沒有溢出限制

如果超出這些限制,此函數(shù)將返回溢出錯(cuò)誤。

五、標(biāo)準(zhǔn)和兼容性

SQL/92 Transact-SQL 擴(kuò)展。

SQL/99 Transact-SQL 擴(kuò)展。

Sybase 與 Adaptive Server Enterprise 兼容。

六、示例

下面的語句返回 1:

select datediff( hour, ''4:00am'', ''5:50am'' )

下面的語句返回 102:

select datediff( month, ''1987/05/02'', ''1995/11/15'' )

下面的語句返回 0:

select datediff( day, ''00:00'', ''23:59'' )

下面的語句返回 4:

select datediff( day, ''1999/07/1900:00'',''1999/07/2323:59'' )

下面的語句返回 0:

select datediff( month, ''1999/07/19'', ''1999/07/23'' )

下面的語句返回 1:

select datediff( month, ''1999/07/19'', ''1999/08/23'' )

今天的文章分享就到此結(jié)束,希望本次分享會(huì)對正在學(xué)習(xí)Python的你有所幫助,文章部分素材來源網(wǎng)絡(luò),如有侵權(quán),請聯(lián)系刪除。

關(guān)注菜鳥學(xué)Python,撰寫文章分享知識(shí)也挺辛苦的,希望大家多多關(guān)注,轉(zhuǎn)發(fā)與收藏。文末左側(cè)了解更多有一個(gè)免費(fèi)的flask課程,需要的同學(xué)可以點(diǎn)擊了解了解一下。

Python入門:利用Python快速收集金融數(shù)據(jù) 行業(yè)視頻課程

img

青文

關(guān)注

Python 作為一種開源語言提供了豐富的 API 和工具,具有較高的靈活性,同時(shí)相關(guān)的第三方庫(requests+Beautiful Soup+re)也較為成熟,可以很容易的開發(fā)出數(shù)據(jù)爬取爬蟲等程序,對于非專業(yè)程序員卻又有編程需求的業(yè)務(wù)人員非常合適。本次我們將以采集金融數(shù)據(jù)為例講述利用Python采集金融數(shù)據(jù)的過程。

BeautifulSoup庫是解析、遍歷、維護(hù) “標(biāo)簽樹” 的功能庫,需要安裝。

RE庫是正則表達(dá)式庫,Python自帶。

在使用 Python 進(jìn)行數(shù)據(jù)采集時(shí),如果是小規(guī)模數(shù)據(jù)采集,可以使用 requests+Beautiful Soup+re 的架構(gòu)來完成,使用 requests庫可以自動(dòng)提交網(wǎng)絡(luò)請求和自動(dòng)爬取 HTML 頁面,使用 Beautiful Soup 庫和 re 正則表達(dá)式可解析 HTML頁面和提取頁面關(guān)鍵信息。

在開始采集之前,我們需要對目標(biāo)網(wǎng)站進(jìn)行充分的分析。特別是URL結(jié)構(gòu)和頁面的HTML結(jié)構(gòu),確定好需要采集的數(shù)據(jù)和數(shù)據(jù)所在的頁面。根據(jù)對目標(biāo)網(wǎng)站(

某金融信息網(wǎng)站

)的分析,我這次采集的目標(biāo)鎖定在

某類交易商品銷售情況上,將要采集

交易名稱、價(jià)格、成交量、換手率、交易者、交易者地址等。此外我們還要查看網(wǎng)站的robots.txt 文件,以便確定爬取策略。

(一)確定數(shù)據(jù)爬取策略。

我們需要由某一頁面的URL地址開始,形成目標(biāo)頁面的URL隊(duì)列,從觀察網(wǎng)站頁面的URL變化得知,目標(biāo)網(wǎng)站產(chǎn)品分類頁的URL有以下規(guī)律(http://s.####/search?q=”類別”&s=頁碼 )URL地址的尾部由類別和頁碼組成,由此我們就可以制定好頁面爬取URL隊(duì)列的規(guī)則,只需使用Python腳本

遍歷得到頁面信息。每次遍歷實(shí)現(xiàn)對單個(gè) HTML 頁面信息的獲取、解析和存儲(chǔ)。頁面信息的獲取調(diào)用了自定義方法getHTML (),頁面信息的解析調(diào)用了自定義方法parseHTML()。

for i in range(頁面數(shù)量):

time.sleep(2)

try:

url=start_url+str(每頁商品數(shù)量 *i)

html=getHTML(url)

parseHTML(html,goodslist)

saveGoodsList(goodslist,file_path)

except:

continue

(二)獲取 HTML 頁面信息。Python可以通過

調(diào)用 requests 庫的 get(url)方法獲取 HTML 頁面的源代碼。

url 作為 get(url)方法參數(shù)指明了要獲取的資源路徑,返回的頁面信息被存儲(chǔ)為 Response 對象中。Response 對象的text 即為 HTML 的頁面內(nèi)容。requests 還包括 post()、head()等方法。使用 requests.get(url).text 可以獲得url 地址所對應(yīng)的 HTML 文檔內(nèi)容;使用 f.write(re-quests.get(url).content)可以將 url 所指向資源以二進(jìn)制的形式獲得并保存至本地硬盤。 getHTML()方法代碼如下:

r=requests.get(url,header,timeout=30)

return r.text

(三)解析 HTML 文檔,提取關(guān)鍵信息。獲取頁面信息后,就要對 HTML 頁面內(nèi)容進(jìn)行分析以提取關(guān)鍵信息。整個(gè)解析過程中要對 HTTP 協(xié)議及 HTML 文檔結(jié)構(gòu)有足夠的認(rèn)識(shí)。當(dāng)前要獲取的是交易名稱、價(jià)格、成交量、換手率、交易者、交易者地址等信息,分析 HTML 頁面源代碼發(fā)現(xiàn)其結(jié)構(gòu)如下:

"title":"COMEX白銀 "

"price":"15.89"

"sales":"成交量"

"user":"交易者"

"item":"廣東 廣州"

根據(jù)頁面規(guī)律這些信息可以使用正則表達(dá)式直接提取,正則表達(dá)式是一個(gè)特殊的字符序列,它能方便地檢查一個(gè)字符串是否與某種模式匹配。re 庫是 python 的標(biāo)準(zhǔn)庫,主要用于字符串匹配。re 的 findall()可以實(shí)現(xiàn)在文本中檢索全部能匹配的字符子串,并將檢索結(jié)果以列表類型返回。re 還包括 search()、match()、split()等方法。當(dāng)然如果正則表達(dá)式無法提取信息也可以使用Beautiful Soup庫等對頁面內(nèi)容進(jìn)行解析。

(四)采集結(jié)果分析。當(dāng)數(shù)據(jù)采集完畢,我們即可使用Python強(qiáng)大的數(shù)據(jù)分析庫對數(shù)據(jù)進(jìn)行分析。

如:NumPy、Matplotlib等。

NumPy

NumPy 是 Python 科學(xué)計(jì)算的基礎(chǔ)包,它提供:

快速高效的多維數(shù)組對象 ndarray;

直接對數(shù)組執(zhí)行數(shù)學(xué)運(yùn)算及對數(shù)組執(zhí)行元素級計(jì)算的函數(shù);

線性代數(shù)運(yùn)算、隨機(jī)數(shù)生成;

將 C、C++、Fortran 代碼集成到 Python 的工具等。

它專為進(jìn)行嚴(yán)格的數(shù)字處理而產(chǎn)生。多為很多大型金融公司使用,以及核心的科學(xué)計(jì)算組織如:Lawrence Livermore,NASA 用其處理一些本來使用 C++,F(xiàn)ortran 或Matlab 等所做的任務(wù)。

Python操作Mysql數(shù)據(jù)庫入門——查看和增加記錄 流量視頻課程

img

杭語兒

關(guān)注

前言

最近學(xué)了一下sql,因?yàn)樽鰯?shù)據(jù)分析不會(huì)sql真不行。

平時(shí)學(xué)的都是Python,所以如果要用pandas做數(shù)據(jù)分析,數(shù)據(jù)除了導(dǎo)入excel和csv文件,

應(yīng)該還要會(huì)從數(shù)據(jù)庫中導(dǎo)入數(shù)據(jù)到Python中,于是我進(jìn)行了以下的學(xué)習(xí)和探索。

環(huán)境

Python 3.X

IDE : juyter notebook

安裝必要的模塊

進(jìn)入:

http://lfd.uci.edu/~gohlke/pythonlibs/#mysqlclient

找到適合自己的版本

下載到本地(我的下載到e:盤根目錄)

然后打開cmd如下圖安裝

這里推薦本地安裝

使用Python連接數(shù)據(jù)庫

import MySQLdb

如果導(dǎo)入模塊沒報(bào)錯(cuò),恭喜你,安裝模塊成功了!

conn = MySQLdb.connect( host = '127.0.0.1',#本地地址 user = 'root',#一般默認(rèn)用戶名 passwd = '********',#本地?cái)?shù)據(jù)庫登錄密碼 db = 'test',#數(shù)據(jù)庫名稱 port = 3306,#安裝mysql默認(rèn)的端口號(hào) charset = 'utf8'#設(shè)置數(shù)據(jù)庫統(tǒng)一編碼)

通過connect方法連接本地mysql數(shù)據(jù)庫,這里要注意你要修改的或許是登錄密碼和數(shù)據(jù)庫名稱

創(chuàng)建游標(biāo)

首先,我們要?jiǎng)?chuàng)建一個(gè)游標(biāo)

cursor = conn.cursor()

什么是游標(biāo)呢?

游標(biāo)就相當(dāng)于一個(gè)緩沖區(qū),存放暫時(shí)的結(jié)果(這是我的理解)

就像去超市買買買,你可能要推一個(gè)手推車,這里的手推車就像游標(biāo),推著手推車去對應(yīng)的貨架完成挑選操作,而手推車最終會(huì)在出超市時(shí)候清空

觀察數(shù)據(jù)庫

我本地的數(shù)據(jù)庫test中有個(gè)tdb_goods的表

表的內(nèi)容如上圖所示

有商品的id,名稱,種類id,品牌id,是否在售和是否下架幾個(gè)字段

一共有23條記錄

獲取數(shù)據(jù)

我們使用select語句可以獲取數(shù)據(jù)

cursor.execute('SELECT * FROM `tdb_goods`;')data = cursor.fetchone()#取一條數(shù)據(jù)print(data)

首先我們用游標(biāo)的execute方法執(zhí)行一句sql語句獲取tdb_goods中的所有數(shù)據(jù)

然后使用游標(biāo)的fetchone方法取出其中一條記錄并且展現(xiàn)出來

如上圖,我們?nèi)〕龅臄?shù)據(jù)是元組形式

當(dāng)然,我們應(yīng)該養(yǎng)成打開后關(guān)閉的好習(xí)慣,所以,在操作結(jié)束,應(yīng)該斷開與數(shù)據(jù)庫的連接

conn.close()

異常處理

當(dāng)我們在操作時(shí),希望和在mysql數(shù)據(jù)庫中一樣,異常時(shí)會(huì)提示異常信息

那么我們就要加入異常處理模塊

try: conn = MySQLdb.connect( host = '127.0.0.2222', user = 'root', passwd = '********', db = 'test', port = 3306, charset = 'utf8' )except MySQLdb.Error as e: print('Error:%s' % e)

這里異常時(shí),就將異常的信息告知我們了

我們將以上代碼整理一下:

import MySQLdbtry: conn = MySQLdb.connect( host = '127.0.0.1', user = 'root', passwd = '********', db = 'test', port = 3306, charset = 'utf8' ) cursor = conn.cursor() cursor.execute('SELECT * FROM `tdb_goods`;') data = cursor.fetchone() print(data) conn.close()except MySQLdb.Error as e: print('Error:%s' % e)

當(dāng)我們將fetchone改成fetchall時(shí)候,就是取出所有信息了

使用面向?qū)ο缶幊?/p>

如果你熟悉面向?qū)ο缶幊袒蛘呖催^我寫的面向?qū)ο缶幊倘腴T系列(小姐姐系列)

傳送門:

Python面向?qū)ο缶幊虖牧汩_始(1)——從沒對象到有對象

Python面向?qū)ο缶幊虖牧汩_始(2)—— 與對象相互了解

Python面向?qū)ο缶幊虖牧汩_始(3)—— 小姐姐請客上篇

Python面向?qū)ο缶幊虖牧汩_始(4)—— 小姐姐請客下篇

Python面向?qū)ο缶幊虖牧汩_始(5)—— 小姐姐要買房

如果你還沒接觸過面向?qū)ο缶幊?,看完以?篇至少對接下來的內(nèi)容理解上不存在問題

import MySQLdbclass Mysql(object): def __init__(self): self.connect() def connect(self): try: self.conn = MySQLdb.connect( host = '127.0.0.1', user = 'root', passwd = '********', db = 'test', port = 3306, charset = 'utf8' ) except MySQLdb.Error as e: print('Error:%s' % e) def close_conn(self): try: if self.conn: self.conn.close() except MySQLdb.Error as e: print('Error:%s' % e) def get_a(self): sql = 'select * from `tdb_goods` where `cate_id` = %s;' cursor = self.conn.cursor() cursor.execute(sql,('1',)) data = cursor.fetchone() print(data) cursor.close() self.close_conn() def main(): object = Mysql() object.get_a() if __name__ == '__main__': main()

注:這里定義了一個(gè)類叫Mysql,然后用類創(chuàng)建一個(gè)對象名為object,在創(chuàng)建對象的時(shí)候,類的初始化時(shí)調(diào)用連接數(shù)據(jù)庫函數(shù)

創(chuàng)建了一個(gè)叫object的對象,使用對象的get_a方法從數(shù)據(jù)庫tdb_goods中選出cate_id=1的一條記錄,在get_a函數(shù)最后位置斷開數(shù)據(jù)庫連接

結(jié)果如下:

插入記錄到數(shù)據(jù)庫

import MySQLdbclass Mysql(object): def __init__(self): self.connect() def connect(self): try: self.conn = MySQLdb.connect( host = '127.0.0.1', user = 'root', passwd = '********', db = 'test', port = 3306, charset = 'utf8' ) except MySQLdb.Error as e: print('Error:%s' % e) def close_conn(self): try: if self.conn: self.conn.close() except MySQLdb.Error as e: print('Error:%s' % e) def get_a(self): sql = 'select * from `tdb_goods` where `cate_id` = %s;' cursor = self.conn.cursor() cursor.execute(sql,('1',)) data = cursor.fetchone() print(data) cursor.close() self.close_conn() def add_a(self): sql = "insert into `tdb_goods`(`goods_name`,`cate_id`,`brand_id`,`goods_price`,`is_show`,`is_saleoff`) value (%s,%s,%s,%s,%s,%s);" cursor = self.conn.cursor() cursor.execute(sql,('偉哥牌notebook','8','1','66666','1','0')) cursor.close() self.close_conn() def main(): object = Mysql() object.add_a() if __name__ == '__main__': main()

注:這里,將一條記錄插入了數(shù)據(jù)庫,但是當(dāng)我執(zhí)行完這條語句(沒報(bào)錯(cuò))

刷新數(shù)據(jù)庫并沒有新增一條記錄

劃重點(diǎn):在這里,有一個(gè)self.connmit(),這個(gè)叫提交,如果不寫這句,就無法將所做修改保存的數(shù)據(jù)庫中

加上這個(gè)之后(加在以下兩句之間):

可以看到,數(shù)據(jù)成功寫入數(shù)據(jù)庫了~

如果運(yùn)行代碼報(bào)錯(cuò),很可能是你的數(shù)據(jù)庫名和數(shù)據(jù)庫登錄密碼沒有修改~

文中如有錯(cuò)誤和敘述不妥之處,望指正。

python數(shù)據(jù)分析筆記——數(shù)據(jù)加載與整理 推廣視頻課程

img

古松樹

關(guān)注

文 | 張俊紅

數(shù)據(jù)加載

導(dǎo)入文本數(shù)據(jù)

1、導(dǎo)入文本格式數(shù)據(jù)(CSV)的方法:

方法一:使用pd.read_csv(),默認(rèn)打開csv文件。

9、10、11行三種方式均可以導(dǎo)入文本格式的數(shù)據(jù)。

特殊說明:第9行使用的條件是運(yùn)行文件.py需要與目標(biāo)文件CSV在一個(gè)文件夾中的時(shí)候可以只寫文件名。第10和11行中文件名ex1.CSV前面的部分均為文件的路徑。

方法二:使用pd.read.table(),需要指定是什么樣分隔符的文本文件。用sep=””來指定。

2、當(dāng)文件沒有標(biāo)題行時(shí)

可以讓pandas為其自動(dòng)分配默認(rèn)的列名。

也可以自己定義列名。

3、將某一列作為索引,比如使用message列做索引。通過index_col參數(shù)指定’message’。

4、要將多個(gè)列做成一個(gè)層次化索引,只需傳入由列編號(hào)或列名組成的列表即可。

5、文本中缺失值處理,缺失數(shù)據(jù)要么是沒有(空字符串),要么是用某個(gè)標(biāo)記值表示的,默認(rèn)情況下,pandas會(huì)用一組經(jīng)常出現(xiàn)的標(biāo)記值進(jìn)行識(shí)別,如NA、NULL等。查找出結(jié)果以NAN顯示。

6、逐塊讀取文本文件

如果只想讀取幾行(避免讀取整個(gè)文件),通過nrows進(jìn)行制定即可。

7、對于不是使用固定分隔符分割的表格,可以使用正則表達(dá)式來作為read_table的分隔符。

(’\s+’是正則表達(dá)式中的字符)。

導(dǎo)入JSON數(shù)據(jù)

JSON數(shù)據(jù)是通過HTTP請求在Web瀏覽器和其他應(yīng)用程序之間發(fā)送數(shù)據(jù)的標(biāo)注形式之一。通過json.loads即可將JSON對象轉(zhuǎn)換成Python對象。(import json)

對應(yīng)的json.dumps則將Python對象轉(zhuǎn)換成JSON格式。

導(dǎo)入EXCEL數(shù)據(jù)

直接使用read_excel(文件名路徑)進(jìn)行獲取,與讀取CSV格式的文件類似。

導(dǎo)入數(shù)據(jù)庫數(shù)據(jù)

主要包含兩種數(shù)據(jù)庫文件,一種是SQL關(guān)系型數(shù)據(jù)庫數(shù)據(jù),另一種是非SQL型數(shù)據(jù)庫數(shù)據(jù)即MongoDB數(shù)據(jù)庫文件。

數(shù)據(jù)庫文件是這幾種里面比較難的,本人沒有接觸數(shù)據(jù)庫文件,沒有親測,所以就不貼截圖了。

數(shù)據(jù)整理

合并數(shù)據(jù)集

1、數(shù)據(jù)庫風(fēng)格的合并

數(shù)據(jù)庫風(fēng)格的合并與SQL數(shù)據(jù)庫中的連接(join)原理一樣。通過調(diào)用merge函數(shù)即可進(jìn)行合并。

當(dāng)沒有指明用哪一列進(jìn)行連接時(shí),程序?qū)⒆詣?dòng)按重疊列的列名進(jìn)行連接,上述語句就是按重疊列“key”列進(jìn)行連接。也可以通過on來指定連接列進(jìn)行連接。

當(dāng)兩個(gè)對象的列名不同時(shí),即兩個(gè)對象沒有共同列時(shí),也可以分別進(jìn)行指定。

Left_on是指左側(cè)DataFrame中用作連接的列。

right_on是指右側(cè)DataFrame中用作連接的列。

通過上面的語句得到的結(jié)果里面只有a和b對應(yīng)的數(shù)據(jù),c和d以及與之相關(guān)的數(shù)據(jù)被消去,這是因?yàn)槟J(rèn)情況下,merge做的是‘inner’連接,即sql中的內(nèi)連接,取得兩個(gè)對象的交集。也有其他方式連接:left、right、outer。用“how”來指明。

也可以根據(jù)多個(gè)鍵(列)進(jìn)行合并,用on傳入一個(gè)由列名組成的列表即可。

2、索引上的合并

(1)普通索引的合并

Left_index表示將左側(cè)的行索引引用做其連接鍵

right_index表示將右側(cè)的行索引引用做其連接鍵

上面兩個(gè)用于DataFrame中的連接鍵位于其索引中,可以使用Left_index=True或right_index=True或兩個(gè)同時(shí)使用來進(jìn)行鍵的連接。

(2)層次化索引

與數(shù)據(jù)庫中用on來根據(jù)多個(gè)鍵合并一樣。

3、軸向連接(合并)

軸向連接,默認(rèn)是在軸方向進(jìn)行連接,也可以通過axis=1使其進(jìn)行橫向連接。

(1)對于numpy對象(數(shù)組)可以用numpy中的concatenation函數(shù)進(jìn)行合并。

(2)對于pandas對象(如Series和DataFrame),可以pandas中的concat函數(shù)進(jìn)行合并。

·4、合并重疊數(shù)據(jù)

對于索引全部或部分重疊的兩個(gè)數(shù)據(jù)集,我們可以使用numpy的where函數(shù)來進(jìn)行合并,where函數(shù)相當(dāng)于if—else函數(shù)。

對于重復(fù)的數(shù)據(jù)顯示出相同的數(shù)據(jù),而對于不同的數(shù)據(jù)顯示a列表的數(shù)據(jù)。同時(shí)也可以使用combine_first的方法進(jìn)行合并。合并原則與where函數(shù)一致,遇到相同的數(shù)據(jù)顯示相同數(shù)據(jù),遇到不同的顯示a列表數(shù)據(jù)。

重塑數(shù)據(jù)集

1、旋轉(zhuǎn)數(shù)據(jù)

(1)重塑索引、分為stack(將數(shù)據(jù)的列旋轉(zhuǎn)為行)和unstack(將數(shù)據(jù)的行旋轉(zhuǎn)為列)。

(2)將‘長格式’旋轉(zhuǎn)為‘寬格式’

2、轉(zhuǎn)換數(shù)據(jù)

(1)數(shù)據(jù)替換,將某一值或多個(gè)值用新的值進(jìn)行代替。(比較常用的是缺失值或異常值處理,缺失值一般都用NULL、NAN標(biāo)記,可以用新的值代替缺失標(biāo)記值)。方法是replace。

一對一替換:用np.nan替換-999

多對一替換:用np.nan替換-999和-1000.

多對多替換:用np.nan代替-999,0代替-1000.

也可以使用字典的形式來進(jìn)行替換。

(2)離散化或面元?jiǎng)澐?,即根?jù)某一條件將數(shù)據(jù)進(jìn)行分組。

利用pd.cut()方式對一組年齡進(jìn)行分組。

默認(rèn)情況下,cut對分組條件的左邊是開著的狀態(tài),右邊是閉合狀態(tài)??梢杂胠eft(right)=False來設(shè)置哪邊是閉合的。

清理數(shù)據(jù)集

主要是指清理重復(fù)值,DataFrame中經(jīng)常會(huì)出現(xiàn)重復(fù)行,清理數(shù)據(jù)主要是針對這些重復(fù)行進(jìn)行清理。

利用drop_duplicates方法,可以返回一個(gè)移除了重復(fù)行的DataFrame.

默認(rèn)情況下,此方法是對所有的列進(jìn)行重復(fù)項(xiàng)清理操作,也可以用來指定特定的一列或多列進(jìn)行。

默認(rèn)情況下,上述方法保留的是第一個(gè)出現(xiàn)的值組合,傳入take_last=true則保留最后一個(gè)。

End.

來源:36大數(shù)據(jù)

用Python生成器處理大數(shù)據(jù) 行業(yè)視頻課程

img

董嘉懿

關(guān)注

不是每個(gè)人都擁有一臺(tái)超級計(jì)算機(jī),那么如何利用一臺(tái)普通計(jì)算機(jī)處理大數(shù)據(jù)?當(dāng)數(shù)據(jù)大小超過你計(jì)算機(jī)的內(nèi)存,這時(shí)不能一次性把大數(shù)據(jù)寫入內(nèi)存里,否則會(huì)產(chǎn)生內(nèi)存溢出。大多數(shù)機(jī)器學(xué)習(xí)算法都是基于內(nèi)存,即原始數(shù)據(jù)以及過程數(shù)據(jù)都保存在內(nèi)存,這給普通計(jì)算機(jī)處理大數(shù)據(jù)造成困難。通過本文的學(xué)習(xí),你將學(xué)會(huì)如何利用普通計(jì)算機(jī)處理大數(shù)據(jù)。本文主要討論如何用Python生成器處理大數(shù)據(jù)。

普通計(jì)算機(jī)處理大數(shù)據(jù)思想是:將大數(shù)據(jù)分為幾批,依次處理每一批數(shù)據(jù),最后綜合各個(gè)批次的處理結(jié)果。有關(guān)Python生成器的概念請參考我的文章《如何理解Python中的生成器?》。生成器的特點(diǎn)是依次不重復(fù)地生成數(shù)據(jù),符合大數(shù)據(jù)處理思想,因此利用Python生成器處理大數(shù)據(jù)是一種很自然的想法。

利用生成器,在普通計(jì)算機(jī)里也可以進(jìn)行深度學(xué)習(xí),比如要訓(xùn)練一個(gè)深度神經(jīng)網(wǎng)絡(luò),可以采取批次訓(xùn)練方法,對每一個(gè)批次,利用生成器從硬盤里提取一個(gè)批次的數(shù)據(jù),并不需要把所有數(shù)據(jù)加載到內(nèi)存里,對于訓(xùn)練過程以及結(jié)果,相應(yīng)地也可以采取批次方法將結(jié)果保存到硬盤里,唯一要做的是重寫代碼。

本文提供一個(gè)簡單案例,統(tǒng)計(jì)自然常數(shù)e的41萬位小數(shù)點(diǎn)的數(shù)字0-9出現(xiàn)的次數(shù),展示Python生成器,在不需要將數(shù)據(jù)寫入內(nèi)存的情況下,如何批次處理大數(shù)據(jù)。處理思想就是把41萬位小數(shù)點(diǎn)依次劃分為41批次,每個(gè)批次的長度10000位,統(tǒng)計(jì)每個(gè)批次的數(shù)字0-9出現(xiàn)的次數(shù),然后匯總統(tǒng)計(jì)所有批次的次數(shù)。(讀者可以嘗試用1000萬位小數(shù)點(diǎn)在一個(gè)內(nèi)存為1G的普通計(jì)算機(jī)里處理,比較一下普通方法(參考文章《機(jī)器學(xué)習(xí)實(shí)戰(zhàn):用Python分析自然常數(shù)e的小數(shù)點(diǎn)數(shù)字出現(xiàn)規(guī)律》)和本文方法的效果)

1.數(shù)據(jù)

原始數(shù)據(jù)共4100行數(shù)據(jù),每行有100位小數(shù)點(diǎn),共41萬位小數(shù)點(diǎn),其中第1列數(shù)據(jù)為標(biāo)注,需要去掉。數(shù)據(jù)文件名為e.txt,保存在Python項(xiàng)目目錄下。

原始數(shù)據(jù)

2.構(gòu)造生成器

構(gòu)造一個(gè)生成器gen,用于每次從原始文件e.txt中讀取一行數(shù)據(jù)。目前該生成器并沒有真正讀取文件,是一個(gè)機(jī)器,沒啟動(dòng)它之前(使用內(nèi)置方法next()啟動(dòng)它),在Python中只是一個(gè)符號(hào),占用內(nèi)存微不足道。另外優(yōu)點(diǎn)是,該生成器并沒有打開文件對象。

構(gòu)造生成器gen

3.定義批處理函數(shù)

利用生成器gen一次性從原始文件讀取bat_number行數(shù)據(jù)(一個(gè)批次),然后將bat_number行數(shù)據(jù)轉(zhuǎn)化為列表e,接著是數(shù)據(jù)預(yù)處理,比如去掉符號(hào)“\n”和空格,最后將處理后的數(shù)據(jù)轉(zhuǎn)化為Pandas的序列數(shù)據(jù)結(jié)構(gòu)。即通過批處理函數(shù)batch(),能一批次從原始文件讀取bat_number行數(shù)據(jù),并最終轉(zhuǎn)化為Pandas的序列數(shù)據(jù)。值得注意的是,由于生成器的特點(diǎn),運(yùn)行批處理函數(shù)batch()兩次,就得到兩批次的數(shù)據(jù),而且第2批次的數(shù)據(jù)是接著第1批次的數(shù)據(jù)依次產(chǎn)生,因此不重復(fù)。

批處理函數(shù)

4.定義統(tǒng)計(jì)函數(shù)

利用批處理函數(shù)batch()獲取一個(gè)批次的數(shù)據(jù),并統(tǒng)計(jì)數(shù)字的出現(xiàn)次數(shù),然后遍歷所有批次,得到數(shù)字出現(xiàn)次數(shù)的列表。

統(tǒng)計(jì)函數(shù)

5.運(yùn)行結(jié)果及可視化展示

作為例子,運(yùn)行主程序,匯總統(tǒng)計(jì)數(shù)字“9”的出現(xiàn)次數(shù),并繪制每個(gè)批次出現(xiàn)次數(shù)的曲線圖。代碼如下:

主程序代碼

可視化:

各個(gè)批次的次數(shù)曲線圖

運(yùn)行結(jié)果如下:

運(yùn)行結(jié)果

6.總結(jié)

本文展示了如何利用Python生成器處理大數(shù)據(jù)的全過程。所使用的方法是通用的,可以應(yīng)用于機(jī)器學(xué)習(xí)、深度學(xué)習(xí)等領(lǐng)域。即使你沒有超級計(jì)算機(jī),也沒有分布式大數(shù)據(jù)處理系統(tǒng),只要你選擇合適的算法、合適的數(shù)據(jù)結(jié)構(gòu)和合適的工具(Python生成器),你只有一臺(tái)普通計(jì)算機(jī)也可以處理大數(shù)據(jù)。

(作者:百家號(hào)/AiMath)

Python抓取app數(shù)據(jù)(摩拜單車) 營銷視頻課程

img

優(yōu)柔

關(guān)注

前幾天有人問我,可以幫我抓取摩拜單車的數(shù)據(jù)嘛?

我想著幫他抓取下次他還是不會(huì),古話說的好:授人以魚不如授人以漁,所以本次我們就講講如何抓取app的內(nèi)容吧。

Fiddle的安裝及配置

抓手機(jī)包我用的是fiddle。

安裝

先在下載頁面下載-→https://telerik/download/fiddler

選擇你“準(zhǔn)備用fiddle來干嘛”

你的郵箱

以及同意“最終用戶許可協(xié)議”就可以下載了

下載后按照提示安裝就可以了。

配置

源碼 群 5952 66089

開始抓包

首先確保電腦和手機(jī)連在同一個(gè)WiFi下面

打開fiddle

獲取電腦ip

打開cmd命令行

輸入ipconfig,如圖所示,192.168.31.146就是我的ip地址

打開手機(jī)WiFi設(shè)置,找到你當(dāng)前鏈接的WiFi

我當(dāng)前鏈接的是Xiaomi_E172_5G

設(shè)置代理服務(wù)器為你電腦的ip,端口號(hào)為上面設(shè)置的端口號(hào)(默認(rèn)為8888)

安裝https證書

在手機(jī)瀏覽器上打開 你電腦ip:你設(shè)置的端口號(hào)

我的是192.168.31.146:8888

點(diǎn)擊框框處安裝證書

設(shè)置fiddle監(jiān)聽所有請求

選擇all process

打開摩拜單車app

然后你會(huì)看到定位的時(shí)候一輛車也沒有。。。

打開個(gè)人詳情頁還提示“抱歉,服務(wù)暫不可用。

這是因?yàn)槟Π萦蟹雷ト∠拗疲ㄎ也率菣z測,如果有使用代理的話,直接讓你用不了。。。)

那這樣的話我們就沒辦法抓到么???

因?yàn)槲抑斑€用過摩拜的小程序,所以我們抓抓微信小程序試試看

打開摩拜單車的小程序

我們看到已經(jīng)定位了。。,并且把附件的單車都顯示出來了

我們可以多移動(dòng)我們的位置,然后等有把附近的車顯示出來

可以看到fiddle上面已經(jīng)有好多請求了

mobike-api。。。這很明顯就是我們要找的請求

請求頭如下圖所示,方法是post

返回值因?yàn)槲铱吹绞莏son的格式了,所以直接以json的格式看。

源碼 群 59 5266089

可以看到我們已經(jīng)抓取了需要的數(shù)據(jù),那么怎么抓取整個(gè)上海的摩拜單車情況呢??

只要獲取上海的所有經(jīng)緯度,然后替換上面data中的經(jīng)度及緯度就可以了。。。

那么怎么獲取上海的所有經(jīng)緯度。。。這方面沒怎么接觸。。

看完我相信大家應(yīng)該多試幾次就好了。比較實(shí)用的技巧奉上。

Python實(shí)現(xiàn)數(shù)據(jù)可視化,看如何監(jiān)控你的爬蟲 互聯(lián)網(wǎng)視頻課程

img

屈夜安

關(guān)注

好,開始今天的文章。

今天主要是來說一下怎么可視化來監(jiān)控你的爬蟲的狀態(tài)。

相信大家在跑爬蟲的過程中,也會(huì)好奇自己養(yǎng)的爬蟲一分鐘可以爬多少頁面,多大的數(shù)據(jù)量,當(dāng)然查詢的方式多種多樣。今天我來講一種可視化的方法。

關(guān)于爬蟲數(shù)據(jù)在mongodb里的版本我寫了一個(gè)可以熱更新配置的版本,即添加了新的爬蟲配置以后,不用重啟程序,即可獲取剛剛添加的爬蟲的狀態(tài)數(shù)據(jù)。

1.成品圖

這個(gè)是監(jiān)控服務(wù)器網(wǎng)速的最后成果,顯示的是下載與上傳的網(wǎng)速,單位為M。爬蟲的原理都是一樣的,只不過將數(shù)據(jù)存到InfluxDB的方式不一樣而已, 如下圖。

可以實(shí)現(xiàn)對爬蟲數(shù)量,增量,大小,大小增量的實(shí)時(shí)監(jiān)控。

2. 環(huán)境

InfluxDb,是目前比較流行的時(shí)間序列數(shù)據(jù)庫;

Grafana,一個(gè)可視化面板(Dashboard),有著非常漂亮的圖表和布局展示,功能齊全的度量儀表盤和圖形編輯器,支持Graphite、zabbix、InfluxDB、Prometheus和OpenTSDB作為數(shù)據(jù)源

Ubuntu

influxdb(pip install influxdb)

Python 2.7

3. 原理

獲取要展示的數(shù)據(jù),包含當(dāng)前的時(shí)間數(shù)據(jù),存到InfluxDb里面,然后再到Grafana里面進(jìn)行相應(yīng)的配置即可展示;

4. 安裝

4.1 Grafana安裝

官方安裝指導(dǎo)

安裝好以后,打開本地的3000端口,即可進(jìn)入管理界面,用戶名與密碼都是admin。

4.2 InfulxDb安裝

這個(gè)安裝就網(wǎng)上自己找吧,有很多的配置我都沒有配置,就不在這里誤人子弟了。

5. InfluxDb簡單操作

碰到了數(shù)據(jù)庫,肯定要把增刪改查學(xué)會(huì)了啊, 和sql幾乎一樣,只有一絲絲的區(qū)別,具體操作,大家可以參考官方的文檔。

influx 進(jìn)入命令行

CREATE DATABASE test 創(chuàng)建數(shù)據(jù)庫

show databases 查看數(shù)據(jù)庫

use test 使用數(shù)據(jù)庫

show series 看表

select * from table_test 選擇數(shù)據(jù)

DROP MEASUREMENT table_test 刪表

6. 存數(shù)據(jù)

InfluxDb數(shù)據(jù)庫的數(shù)據(jù)有一定的格式,因?yàn)槲叶际抢胮ython庫進(jìn)行相關(guān)操作,所以下面將在python中的格式展示一下:

其中:

measurement, 表名

time,時(shí)間

tags,標(biāo)簽

fields,字段

可以看到,就是個(gè)列表里面,嵌套了一個(gè)字典。其中,對于時(shí)間字段,有特殊要求,可以參考這里, 下面是python實(shí)現(xiàn)方法:

所以,到這里,如何將爬蟲的相關(guān)屬性存進(jìn)去呢?以MongoDB為例

完整代碼,關(guān)注上面的公眾號(hào),發(fā)送“”可視化“”即可獲取。

那么現(xiàn)在我們已經(jīng)往數(shù)據(jù)里存了數(shù)據(jù)了,那么接下來要做的就是把存的數(shù)據(jù)展示出來。

7.展示數(shù)據(jù)

7.1 配置數(shù)據(jù)源

以admin登錄到Grafana的后臺(tái)后,我們首先需要配置一下數(shù)據(jù)源。點(diǎn)擊左邊欄的最下面的按鈕,然后點(diǎn)擊DATA SOURCES,這樣就可以進(jìn)入下面的頁面:

點(diǎn)擊ADD DATA SOURCE,進(jìn)行配置即可,如下圖:

其中,name自行設(shè)定;Type 選擇InfluxDB;url為默認(rèn)的http://localhost:8086, 其他的因?yàn)槲仪懊鏇]有進(jìn)行配置,所以默認(rèn)的即可。然后在InfluxDB Details里的填入Database名,最后點(diǎn)擊測試,如果沒有報(bào)錯(cuò)的話,則可以進(jìn)入下一步的展示數(shù)據(jù)了;

7.2 展示數(shù)據(jù)

點(diǎn)擊左邊欄的+號(hào),然后點(diǎn)擊GRAPH

接著點(diǎn)擊下圖中的edit進(jìn)入編輯頁面:

從上圖中可以發(fā)現(xiàn):

中間板塊是最后的數(shù)據(jù)展示

下面是數(shù)據(jù)的設(shè)置項(xiàng)

右上角是展示時(shí)間的設(shè)置板塊,在這里可以選擇要展示多久的數(shù)據(jù)

7.2.1 配置數(shù)據(jù)

在Data Source中選擇剛剛在配置數(shù)據(jù)源的時(shí)候配置的NAME字段,而不是database名。

接著在下面選擇要展示的數(shù)據(jù)??粗秃苁煜な遣皇牵耆莝ql語句的可視化。同時(shí),當(dāng)我們的數(shù)據(jù)放到相關(guān)的字段上的時(shí)候,雙擊,就會(huì)把可以選擇的項(xiàng)展示出來了,我們要做的就是直接選擇即可;

設(shè)置右上角的時(shí)間,則可以讓數(shù)據(jù)實(shí)時(shí)進(jìn)行更新與展示

因?yàn)橄旅娴呐渲脤?shí)質(zhì)就是sql查詢語句,所以大家按照自己的需求,進(jìn)行選擇配置即可,當(dāng)配置完以后,就可以在中間的面板里面看到數(shù)據(jù)了。

8. 總結(jié)

到這里,本篇文章就結(jié)束了。其中,對于Grafana的操作我沒有介紹的很詳細(xì),因?yàn)楸酒饕v的是怎么利用這幾個(gè)工具完成我們的任務(wù)。

同時(shí),里面的功能確實(shí)很多,還有可以安裝的插件。我自己目前還是僅僅對于用到的部分比較了解,所以大家可以查詢官方的或者別的教程資料來對Grafana進(jìn)行更深入的了解,制作出更加好看的可視化作品來。

文末知識(shí)點(diǎn)摘要①:sql中dateiff函數(shù)的用法

DATEDIFF

返回跨兩個(gè)指定日期的日期和時(shí)間邊界數(shù)。

一、 語法

DATEDIFF ( datepart , startdate , enddate )

二、參數(shù)

datepart

是規(guī)定了應(yīng)在日期的哪一部分計(jì)算差額的參數(shù)。下表列出了 Microsoft SQL Server? 識(shí)別的日期部分和縮寫。

日期部分 縮寫

year yy, yyyy

quarter qq, q

Month mm, m

dayofyear dy, y

Day dd, d

Week wk, ww

Hour hh

minute mi, n

second ss, s

millisecond ms

startdate

是計(jì)算的開始日期。startdate 是返回 datetime 或 smalldatetime 值或日期格式字符串的表達(dá)式。

因?yàn)?smalldatetime 只精確到分鐘,所以當(dāng)用 smalldatetime 值時(shí),秒和毫秒總是 0。

如 果您只指定年份的最后兩位數(shù)字,則小于或等于"兩位數(shù)年份截止期"配置選項(xiàng)的值的最后兩位數(shù)字的數(shù)字所在世紀(jì)與截止年所在世紀(jì)相同。大于該選項(xiàng)的值的最后 兩位數(shù)字的數(shù)字所在世紀(jì)為截止年所在世紀(jì)的前一個(gè)世紀(jì)。例如,如果 two digit year cutoff 為 2049(默認(rèn)),則 49被解釋為 2049,2050 被解釋為 1950。為避免模糊,請使用四位數(shù)的年份。

enddate

是計(jì)算的終止日期。enddate 是返回 datetime 或 smalldatetime 值或日期格式字符串的表達(dá)式。

三、返回類型

integer

四、用法

此函數(shù)計(jì)算兩個(gè)指定日期之間日期部分的數(shù)目。結(jié)果為日期部分中等于(date2 - date1)的有符號(hào)的整數(shù)值。

當(dāng)結(jié)果不是日期部分的偶數(shù)倍時(shí),DATEDIFF 將被截?cái)喽皇潜簧崛搿?/p>

當(dāng)使用 day 作為日期部分時(shí),DATEDIFF 返回兩個(gè)指定的時(shí)間之間(包括第二個(gè)日期但不包括第一個(gè)日期)的午夜數(shù)。

當(dāng)使用 month 作為日期部分時(shí),DATEDIFF 返回兩個(gè)日期之間(包括第二個(gè)日期但不包括第一個(gè)日期)出現(xiàn)的月的第一天的數(shù)目。

當(dāng)使用 week 作為日期部分時(shí),DATEDIFF 返回兩個(gè)日期(包括第二個(gè)日期但不包括第一個(gè)日期)之間星期日的數(shù)目。

對于更小的時(shí)間單位存在溢出值:

milliseconds 24 天

seconds 68 年

minutes 4083 年

others 沒有溢出限制

如果超出這些限制,此函數(shù)將返回溢出錯(cuò)誤。

五、標(biāo)準(zhǔn)和兼容性

SQL/92 Transact-SQL 擴(kuò)展。

SQL/99 Transact-SQL 擴(kuò)展。

Sybase 與 Adaptive Server Enterprise 兼容。

六、示例

下面的語句返回 1:

select datediff( hour, ''4:00am'', ''5:50am'' )

下面的語句返回 102:

select datediff( month, ''1987/05/02'', ''1995/11/15'' )

下面的語句返回 0:

select datediff( day, ''00:00'', ''23:59'' )

下面的語句返回 4:

select datediff( day, ''1999/07/1900:00'',''1999/07/2323:59'' )

下面的語句返回 0:

select datediff( month, ''1999/07/19'', ''1999/07/23'' )

下面的語句返回 1:

select datediff( month, ''1999/07/19'', ''1999/08/23'' )

今天的文章分享就到此結(jié)束,希望本次分享會(huì)對正在學(xué)習(xí)Python的你有所幫助,文章部分素材來源網(wǎng)絡(luò),如有侵權(quán),請聯(lián)系刪除。

關(guān)注菜鳥學(xué)Python,撰寫文章分享知識(shí)也挺辛苦的,希望大家多多關(guān)注,轉(zhuǎn)發(fā)與收藏。文末左側(cè)了解更多有一個(gè)免費(fèi)的flask課程,需要的同學(xué)可以點(diǎn)擊了解了解一下。

img

在線咨詢

建站在線咨詢

img

微信咨詢

掃一掃添加
動(dòng)力姐姐微信

img
img

TOP