python MySQLdb 创建表的问题

新手上路,请多包涵

各位大神好,我是python菜鸟一枚~~以前只用来做计算,现在准备学习下开发简单的python项目,现在遇到一个问题(可能很水,请轻拍 T_T)

问题如下:

读文件,解析,然后写入表中。
问题出在最后一个环节,通过list传参,得到要执行的sql脚本中的字段有引号,mysql创建表失败,

主要代码如下:

sqlStr_create = '''
CREATE TEMPORARY TABLE temTB(
   %s INT UNSIGNED AUTO_INCREMENT,
   %s INT UNSIGNED,
   %s VARCHAR(50),
   %s VARCHAR(30),
   %s VARCHAR(50),
   %s VARCHAR(30),
   %s INT,
   %s VARCHAR(10),
   %s varchar(10),
   %s varchar(30),
   %s INT,
   %s varchar(20),
   %s INT,
   %s INT,
   %s INT,
   %s INT,
   %s varchar(20),
   %s varchar(20),
   PRIMARY KEY ( %s )
)ENGINE=MEMORY DEFAULT CHARSET=utf8;
'''
tem_list = ['id', 'age', 'job', 'marital', 'education', 'default', 'balance', 'housing', 'loan', 'contact', 'day', 'month', 'duration', 'campaign', 'pdays', 'previous', 'poutcome', 'y', 'id']
cursor.execute(sqlStr_create, tem_list)

报错信息如下:
"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 ''id' INT UNSIGNED AUTO_INCREMENT,n 'age' INT UNSIGNED,n 'job' VARCHAR(50),n ' at line 2"))

阅读 3.7k
3 个回答

CREATE TEMPORARY TABLE temTB(

id int    PRIMARY KEY AUTO_INCREMENT,
   age INT UNSIGNED,
   job VARCHAR(50),
   marital VARCHAR(30),
   education VARCHAR(50),
   `default` VARCHAR(30),
   balance INT,
   housing VARCHAR(10),
   loan VARCHAR(10),
   contact varchar(30),
   `day` INT,
   `month` varchar(20),
   duration INT,
   campaign INT,
   pdays INT,
   previous INT,
   poutcome varchar(20),
   y varchar(20)

)

tem_list改成元祖试试

跟数据库版本有区别
如果不是精通sql语句的话
还是推荐ORM比如sqlalchemy
创建表、表结构同步、数据的CURD都有的,维护难度也小很多

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题