第三課 上市公司財(cái)報(bào)數(shù)據(jù)庫(kù)表格的建立

回顧一下:

第一課 我是怎樣三天學(xué)會(huì)Python編程,從一無(wú)所知到掌握爬取和訊網(wǎng)上市公司財(cái)務(wù)報(bào)表做分析的----介紹了如何構(gòu)建一個(gè)Python爬蟲環(huán)境,Python+MySQL安裝;

第二課、開心的爬蟲之旅----具體分析目標(biāo)數(shù)據(jù)表的構(gòu)成,介紹了分析網(wǎng)頁(yè)的必要工具;

今天這課是細(xì)化實(shí)現(xiàn)第二課的內(nèi)容,實(shí)現(xiàn)建立目標(biāo)數(shù)據(jù)的存放地點(diǎn),即上市公司財(cái)報(bào)表格的建立。

已經(jīng)為大家講解了Python軟件和MySQL的安裝、基本的數(shù)據(jù)庫(kù)操作和抓取網(wǎng)頁(yè)的工具,另外分析了目標(biāo)網(wǎng)站的數(shù)據(jù)結(jié)構(gòu)。

數(shù)據(jù)來(lái)源,網(wǎng)站鏈接都已經(jīng)很清楚了。

我們今天就動(dòng)手實(shí)現(xiàn)完成上市公司三表的數(shù)據(jù)表的建立。

下面我一步步給你演示,同時(shí)請(qǐng)你也跟隨我一步一步完成這些操作。

這些操作另一種做法就是寫成程序,可以一次性完成它。

我這里只是為了方便為你解說(shuō)加入相關(guān)內(nèi)容,而采用了命令行的方式。

1、首先確保MySQL打開(ctrl+alt+del 啟動(dòng)任務(wù)管理器->查看服務(wù) 是否有mysql57正在運(yùn)行)或者用下面語(yǔ)句直接做連接測(cè)試。

>>> import pymysql ?###導(dǎo)入MySQL鏈接函數(shù)庫(kù)

>>> connect = pymysql.Connect( ###用Taylor007er用戶連接MySQL

host='localhost',

port=3306,

user='Taylor007er',

passwd='007123',

charset='utf8')

>>> ? ? ? ? ? ? ###這里沒有收到如何錯(cuò)誤提示,說(shuō)明已經(jīng)連上了。

2、建立一個(gè)實(shí)例名稱是`hexun_mj`的數(shù)據(jù)庫(kù)。

你把他們當(dāng)成是一個(gè)EXCEL文件建好了,或者理 解成考勤表的木架子,一排排整整齊齊的,可以裝很多考勤表,很多人會(huì)拿到自己的考勤表簽到?,F(xiàn)在是訂做木架的工作。你可以建很多的架子,提供給不同的公司。

>>> sql ='CREATE SCHEMA `hexun_mj` DEFAULT CHARACTER SET gb2312 ;' ###這句話我以前是不懂的,需要的命令格式,打開MySQL Workbench,左邊導(dǎo)航欄下面SCHEMAS點(diǎn)右鍵 ?Create Schemas...進(jìn)去就可以,系統(tǒng)給出一下窗口,可以看到建立一個(gè)數(shù)據(jù)庫(kù)的命令。我們就依樣畫葫蘆。

>>> cursor = connect.cursor()

>>> cursor.execute(sql)

>>> ? ? ? ? ? ###這里沒有收到如何錯(cuò)誤提示,說(shuō)明數(shù)據(jù)庫(kù)已經(jīng)建好了。

>>>

上面這三句命令的格式應(yīng)該記住,操作數(shù)據(jù)庫(kù)會(huì)不斷的使用這個(gè)組合。

3、打開這個(gè)新建的數(shù)據(jù)庫(kù),我們要往里添加三個(gè)表,用于存放上市公司財(cái)務(wù)三表。你可以把他們看成是EXCEL里的sheels,或者 理解成考勤表,很多人在上面簽到?,F(xiàn)在是打格子的工作 。你可以隨時(shí)加空白考勤表進(jìn)去。這是比喻,方便你能形象理解。在計(jì)算機(jī)里是一樣的。

不同的是計(jì)算機(jī)里的考勤表可以考核的內(nèi)容不局限于時(shí)間,還可以是日期、時(shí)間、數(shù)據(jù)、文 本、圖片等等。

先建立一個(gè)利潤(rùn)表的空表。我們回看一下上次課總結(jié)的數(shù)據(jù)欄目是29項(xiàng),這個(gè)最少。但我們不能蠻干,打29行不是人干的事,重復(fù)的工作交給機(jī)器完成它。

還是先看看別人是怎么建的表。還是用MySQL Workbench。我選了數(shù)據(jù)庫(kù)world里的countrylanguage表,鼠標(biāo)放在表名上有個(gè)黑色的感嘆號(hào)。點(diǎn)開,看到中間出現(xiàn)countrylanguage表的info,我選到DDL,里面有建 立表格用的命令??梢越梃b。

看到這樣的語(yǔ)句

CREATE TABLE `countrylanguage` (

? ? `CountryCode` char(3) NOT NULL DEFAULT '',

`Language` char(30) NOT NULL DEFAULT '',

`IsOfficial` enum('T','F') NOT NULL DEFAULT 'F',

`Percentage` float(4,1) NOT NULL DEFAULT '0.0',

? ? PRIMARY KEY (`CountryCode`,`Language`),

? ? ?KEY `CountryCode` (`CountryCode`),

? ? ?CONSTRAINT `countryLanguage_ibfk_1`

? ? ?FOREIGN KEY (`CountryCode`)

? ? ?REFERENCES `country` (`Code`)

)

? ? ENGINE=InnoDB DEFAULT

? ? CHARSET=latin1

我們抄它有用的部分。

組合成對(duì)利潤(rùn)表有幫助的。

表名是hexun_lrb我用了拼音第一個(gè)字母。

為了批量增加字段名,我參照了網(wǎng)頁(yè)https://www.2cto.com/database/20140的例子

sql = "CREATE TABLE `hexun_mj`.`hexun_lrb` (

`hexun_gpdm` VARCHAR(6) NOT NULL,

`hexun_lrb_n1` VARCHAR(10));"

try: ?###try ... except一個(gè)容錯(cuò)機(jī)制,意思是試著做一些事如果有問(wèn)題,就做例外的事情。

cursor.execute(sql)

except:

print('The table addfields exists!')

# add the fileds 批量增加字段

try:

? ? for i in range(28):

? ? ? ? sql = "ALTER TABLE `hexun_mj`.`hexun_lrb` ADD COLUMN `hexun_lrb_n%s` FLOAT NULL;" %(i+2)

? ? ? ? print (sql)

? ? ? ? cursor.execute(sql)

except Exception:

? ? print ('error')

類似的我們把資產(chǎn)負(fù)債表、現(xiàn)金流量表、財(cái)務(wù)比率表和MJ數(shù)字力分析都建起來(lái)

###資產(chǎn)負(fù)債表

sql = "CREATE TABLE `hexun_mj`.`hexun_zcfzb` (

`hexun_gpdm` VARCHAR(6) NOT NULL,

`hexun_zcfzb_n1` VARCHAR(10));"

try: ?###try ... except一個(gè)容錯(cuò)機(jī)制,意思是試著做一些事如果有問(wèn)題,就做例外的事情。

cursor.execute(sql)

except:

print('The table add fields exists!')

# add the fileds 批量增加字段,這次是68個(gè)

try:

? ? for i in range(68):

? ? ? ? sql = "ALTER TABLE `hexun_mj`.`hexun_zcfzb` ADD COLUMN `hexun_zcfzb_n%s` FLOAT NULL;" %(i+2)

? ? ? ? print (sql)

? ? ? ? cursor.execute(sql)

except Exception:

? ? print ('error')

###現(xiàn)金流量表

sql = "CREATE TABLE `hexun_mj`.`hexun_xjllb` (

`hexun_gpdm` VARCHAR(6) NOT NULL,

`hexun_xjllb_n1` VARCHAR(10));"

try: ?###try ... except一個(gè)容錯(cuò)機(jī)制,意思是試著做一些事如果有問(wèn)題,就做例外的事情。

cursor.execute(sql)

except:

print('The table add fields exists!')

# add the fileds 批量增加字段,這次是69個(gè)

try:

? ? for i in range(69):

? ? ? ? sql = "ALTER TABLE `hexun_mj`.`hexun_xjllb` ADD COLUMN `hexun_xjllb_n%s` FLOAT NULL;" %(i+2)

? ? ? ? print (sql)

? ? ? ? cursor.execute(sql)

except Exception:

? ? print ('error')

###財(cái)務(wù)比率

sql = "CREATE TABLE `hexun_mj`.`hexun_cwbl` (

`hexun_gpdm` VARCHAR(6) NOT NULL,

`hexun_cwbl_n1` VARCHAR(10));"

try: ?###try ... except一個(gè)容錯(cuò)機(jī)制,意思是試著做一些事如果有問(wèn)題,就做例外的事情。

? ?cursor.execute(sql)

except:

? ? print('The table add fields exists!')

# add the fileds 批量增加字段,這次是88個(gè)字段

try:

? ? for i in range(88):

? ? ? ? sql = "ALTER TABLE `hexun_mj`.`hexun_cwbl` ADD COLUMN `hexun_cwbl_n%s` FLOAT NULL;" %(i+2)

? ? ? ? print (sql)

? ? ? ? cursor.execute(sql)

except Exception:

? ? print ('error')

###MJ數(shù)字力分析

sql = "CREATE TABLE `hexun_mj`.`hexun_mjszlfx` (

`hexun_gpdm` VARCHAR(6) NOT NULL,

`hexun_mjszlfx_n1` VARCHAR(10));"

try: ?###try ... except一個(gè)容錯(cuò)機(jī)制,意思是試著做一些事如果有問(wèn)題,就做例外的事情。

? ?cursor.execute(sql)

except:

print('The table add fields exists!')

# add the fileds 批量增加字段,這次是45個(gè)

try:

? ? for i in range(45):

? ? ? ? sql = "ALTER TABLE `hexun_mj`.`hexun_mjszlfx` ADD COLUMN `hexun_mjszlfx_n%s` FLOAT NULL;" %(i+2)

? ? ? ? print (sql)

? ? ? ? cursor.execute(sql)

except Exception:

? ? print ('error')

#做正式的提交

connect.commit()

以上補(bǔ)充建立了上節(jié)課提到的五張報(bào)表的數(shù)據(jù)表。

請(qǐng)同學(xué)們對(duì)著下面的圖看是不是已經(jīng)在自己的電腦上成功建立了這5張表。

這兩次課會(huì)比較細(xì)節(jié),為了達(dá)成具體的實(shí)現(xiàn),請(qǐng)保持耐心。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容