13.利用pymysql创建变量类型的表名解说
在练习爬虫爬取数据时,想将爬取的数据用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)"