在练习爬虫爬取数据时, 想将爬取的数据用 pymysql 存储到数据库中, 并且存储时的表名是一个变量, 但在写完代码运行后经常出面 1064 的错误代码, 在网上查找相关解决方法, 但一直找不到完美的解决方法,
通过各网友的解决, 并结合自己的理解, 终于完美解决了该问题:
现将过程说明如下:
- def save_data(i,n,data1,m,data2):
- table_name = 'xwl_{}'.format(i) # 此为表名的变量名
- conn=pymysql.connect(host='localhost',user='root',
- password='root',charset='utf8',port=3306)
- cursor=conn.cursor()
- # 创建一个名为 xwl_test 的数据库
- cursor.execute('create database if not exists xwl_test character set utf8;')
- cursor.execute('use xwl_test;')
- sql1="create table if not exists `%s`(序号 int, 电视剧名称 char(255), 集数 char(20), 下载地址 char(255)) character set utf8" %(table_name)
- cursor.execute(sql1)
- sql2="insert into `%s`(序号, 电视剧名称, 集数, 下载地址)" %table_name +"values(%s,%s,%s,%s)"
- cursor.execute(sql2,(n,data1,m,data2))
- conn.commit()
- conn.close()
说明:
- # 创建数据库中的变量表名
- sql1="create table if not exists `%s`(序号 int, 电视剧名称 char(255), 集数 char(20), 下载地址 char(255)) character set utf8" %(table_name)
1. 此代码中 `%s` 中的点 (`) 此符号就是在 ESC 下面的那个带波浪符号的 (~) 键,%s 两边各一个, 而且必须用此符号, 不然会报错.
2. 此代码是表示创建一个表名为变量的表 (如果表名不是变量, 则代码为)
sql1="create table if not exists table_name(序号 int, 电视剧名称 char(255), 集数 char(20), 下载地址 char(255)) character set utf8"
以上表名为常量, 比较两种代码发现, 表名为变量名时, 只需要将表名位置改成 `%s` 就可以, 然后在 sql1 语句后加占位符 %(table_name), 此处 table_name 为变量名
- # 在变量表名中的数据库中插入数据
- sql2="insert into `%s`(序号, 电视剧名称, 集数, 下载地址)" %(table_name) +"values(%s,%s,%s,%s)"
1. 此代码中 `%s` 就是表变量名的占位符, 对应如下未用变量名的表名 my_xwl, 然后跟上表变量名中的内容 (序号, 电视剧名称, 集数, 下载地址), 然后结束字符串,
然后加上占位符 %table_name, 然后再用加 (+) 号将前后字符串连接起来, 注意 "values(%s,%s,%s,%s)" 中, values 前是有一个空格的.
sql="insert into my_xwl(序号, tv_title,num,download) values(%s,%s,%s,%s)"
来源: http://www.bubuko.com/infodetail-3241083.html