在练习爬虫爬取数据时,想将爬取的数据用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)"