接上篇,本期,我们就使用python中的mysql-connector-python库将CSV文件导入到mysql中,我们使用的文件是前面通过爬虫获得的一个关于各行业龙头公司的csv文件,详见上市公司财务报表数据汇总。
下面,我用pandas加mysql-connector-python库将上述CSV文件添加到mysql中。具体代码为:
import pandas as pdimport mysql.connector # 读取CSV文件csv_file = '各行业的龙头公司.csv'df = pd.read_csv(csv_file,encoding='gbk') # 连接到MySQL数据库cnx = mysql.connector.connect(user='root', password='root', host='localhost', database='dragoncompany')cursor = cnx.cursor() # 创建表(如果不存在)table_name ="Season_finance"create_table_query = f"""CREATE TABLE IF NOT EXISTS {table_name}( `股票代码`VARCHAR(20), `股票简称`VARCHAR(20), `交易市场`VARCHAR(20), `每股收益(元)`FLOAT, `营业总收入(元)`FLOAT, `净利润(元)`FLOAT, `资产收益率`FLOAT, `营收同比增长`FLOAT, `净利润同比增长`FLOAT, `每股净资产(元)`FLOAT, `每股经营现金流(元)`FLOAT, `销售毛利率`FLOAT, `营收季度环比增长率`FLOAT, `净利润季度环比增长率`FLOAT, `所处行业`VARCHAR(20), `报表季度`VARCHAR(20))"""cursor.execute(create_table_query) # 将数据插入到表中for index,row in df.iterrows(): insert_query = f"INSERT INTO {table_name} (`股票代码`,`股票简称`,`交易市场`,`每股收益(元)`,`营业总收入(元)`,`净利润(元)`,`资产收益率`,`营收同比增长`,`净利润同比增长`,`每股净资产(元)`,`每股经营现金流(元)`,`销售毛利率`,`营收季度环比增长率`,`净利润季度环比增长率`,`所处行业`,`报表季度`) VALUES (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)" cursor.execute(insert_query, tuple(row)) # 提交更改并关闭连接cnx.commit()cursor.close()cnx.close()
执行一下,用select在mysql中看看。
已经写入,可能不太友好,我们用workbench看看,
搞定了,里面有一些需要注意的坑,跟大家说一下:
Q1:运行中报错:
ProgrammingError: 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(20),
`股票简称`VARCHAR(20),
' at line 2
这个主要是符号问题导致的,字符串的符号不是“”、‘’,而是`。在键盘中是这个键
Q2:运行中报错:
ProgrammingError: Not all parameters were used in the SQL statement
具体位置在:
这个错误源于在python3中连接数据库时,没有正确使用MySQL的占位符,虽然前面我们定义了每个列的数据类型,比如VARCHAR(20)、FLOAT等,但在具体执行过程中,无论是数字(包括整数和浮点数)、字符串、日期时间或者其他任意类型,都应该使用%s占位符。
因此,把上面的%f改成%s就解决这个问题了。
好了,本期代码完美解决了将CSV文件导入到MySQL数据库中,其中还是有一些需要注意的环节,大家试试吧?