今天这课是细化实现第二课的内容,实现建立目标数据的存放地点,即上市公司财报表格的建立。
已经为大家讲解了Python软件和MySQL的安装、基本的数据库操作和抓取网页的工具,另外分析了目标网站的数据结构。
数据来源,网站链接都已经很清楚了。
我们今天就动手实现完成上市公司三表的数据表的建立。
下面我一步步给你演示,同时请你也跟随我一步一步完成这些操作。
这些操作另一种做法就是写成程序,可以一次性完成它。
我这里只是为了方便为你解说加入相关内容,而采用了命令行的方式。
1、首先确保MySQL打开(ctrl+alt+del 启动任务管理器->查看服务 是否有mysql57正在运行)或者用下面语句直接做连接测试。
>>> import pymysql ###导入MySQL链接函数库
>>> connect = pymysql.Connect( ###用Taylor007er用户连接MySQL
host='localhost',
port=3306,
user='Taylor007er',
passwd='007123',
charset='utf8')
>>> ###这里没有收到如何错误提示,说明已经连上了。
2、建立一个实例名称是`hexun_mj`的数据库。
你把他们当成是一个EXCEL文件建好了,或者理 解成考勤表的木架子,一排排整整齐齐的,可以装很多考勤表,很多人会拿到自己的考勤表签到。现在是订做木架的工作。你可以建很多的架子,提供给不同的公司。
>>> sql ='CREATE SCHEMA `hexun_mj` DEFAULT CHARACTER SET gb2312 ;' ###这句话我以前是不懂的,需要的命令格式,打开MySQL Workbench,左边导航栏下面SCHEMAS点右键 Create Schemas...进去就可以,系统给出一下窗口,可以看到建立一个数据库的命令。我们就依样画葫芦。
>>> cursor = connect.cursor()
>>> cursor.execute(sql)
>>> ###这里没有收到如何错误提示,说明数据库已经建好了。
上面这三句命令的格式应该记住,操作数据库会不断的使用这个组合。
3、打开这个新建的数据库,我们要往里添加三个表,用于存放上市公司财务三表。你可以把他们看成是EXCEL里的sheels,或者 理解成考勤表,很多人在上面签到。现在是打格子的工作 。你可以随时加空白考勤表进去。这是比喻,方便你能形象理解。在计算机里是一样的。
不同的是计算机里的考勤表可以考核的内容不局限于时间,还可以是日期、时间、数据、文 本、图片等等。
先建立一个利润表的空表。我们回看一下上次课总结的数据栏目是29项,这个最少。但我们不能蛮干,打29行不是人干的事,重复的工作交给机器完成它。
还是先看看别人是怎么建的表。还是用MySQL Workbench。我选了数据库world里的countrylanguage表,鼠标放在表名上有个黑色的感叹号。点开,看到中间出现countrylanguage表的info,我选到DDL,里面有建 立表格用的命令。可以借鉴。
看到这样的语句
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
我们抄它有用的部分。
组合成对利润表有帮助的。
表名是hexun_lrb我用了拼音第一个字母。
为了批量增加字段名,我参照了网页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一个容错机制,意思是试着做一些事如果有问题,就做例外的事情。
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')
类似的我们把资产负债表、现金流量表、财务比率表和MJ数字力分析都建起来
###资产负债表
sql = "CREATE TABLE `hexun_mj`.`hexun_zcfzb` (
`hexun_gpdm` VARCHAR(6) NOT NULL,
`hexun_zcfzb_n1` VARCHAR(10));"
try: ###try ... except一个容错机制,意思是试着做一些事如果有问题,就做例外的事情。
cursor.execute(sql)
except:
print('The table add fields exists!')
# add the fileds 批量增加字段,这次是68个
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')
###现金流量表
sql = "CREATE TABLE `hexun_mj`.`hexun_xjllb` (
`hexun_gpdm` VARCHAR(6) NOT NULL,
`hexun_xjllb_n1` VARCHAR(10));"
try: ###try ... except一个容错机制,意思是试着做一些事如果有问题,就做例外的事情。
cursor.execute(sql)
except:
print('The table add fields exists!')
# add the fileds 批量增加字段,这次是69个
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')
###财务比率
sql = "CREATE TABLE `hexun_mj`.`hexun_cwbl` (
`hexun_gpdm` VARCHAR(6) NOT NULL,
`hexun_cwbl_n1` VARCHAR(10));"
try: ###try ... except一个容错机制,意思是试着做一些事如果有问题,就做例外的事情。
cursor.execute(sql)
except:
print('The table add fields exists!')
# add the fileds 批量增加字段,这次是88个字段
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数字力分析
sql = "CREATE TABLE `hexun_mj`.`hexun_mjszlfx` (
`hexun_gpdm` VARCHAR(6) NOT NULL,
`hexun_mjszlfx_n1` VARCHAR(10));"
try: ###try ... except一个容错机制,意思是试着做一些事如果有问题,就做例外的事情。
cursor.execute(sql)
except:
print('The table add fields exists!')
# add the fileds 批量增加字段,这次是45个
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()
以上补充建立了上节课提到的五张报表的数据表。
请同学们对着下面的图看是不是已经在自己的电脑上成功建立了这5张表。
这两次课会比较细节,为了达成具体的实现。请保持耐心。
领取专属 10元无门槛券
私享最新 技术干货