python 如何以一个变量名为表名创建一个table?

2013 年 9 月 17 日
 fyl00
新人,想利用python抓取一些数据,存到mysql里。
但是我通过以下这个模式无法创建table,报的错误是You have an error in your SQL syntax

I=[A,B,C]
for i in I:
cur.execute("CREATE TABLE IF NOT EXISTS %s (num VARCHAR(25))",i)

求懂的人告知怎么能成功创建一个表名为变量名的table~
7777 次点击
所在节点    Python
13 条回复
est
2013 年 9 月 17 日
试试吧%s改成 ?
delo
2013 年 9 月 17 日
把 execute参数里 i 前面的逗号改成%(不知道我理解对不对… )
roricon
2013 年 9 月 17 日
cur.execute("""CREATE TABLE IF NOT EXISTS {0} (num VARCHAR(25))""".format(i))
cloverstd
2013 年 9 月 17 日
%s 改为 ?
或者 ,i 改为 % (i)
msg7086
2013 年 9 月 18 日
@est
@delo
@roricon
@cloverstd
同学们…… 以「变量名」为表名。

简单查了一下,好像py里变量是不能反射出字符串的,只能反射类和对象的名字。
delo
2013 年 9 月 18 日
@msg7086 好吧,如果需要'A', 'B'这样的字符串的话,可以把I弄成dict吧。用key来标识…
randal
2013 年 9 月 18 日
mysqldb表名不能参数绑定, 需要改成cur.execute("CREATE TABLE IF NOT EXISTS %s (num VARCHAR(25))" % i)
hjyoite
2013 年 9 月 18 日
我觉得7楼是对的。
inyfee
2013 年 9 月 18 日
7楼正解
lambdaT
2013 年 9 月 18 日
for i in l :
sqlStr='CREATE TABLE IF NOT EXISTS' +x ;;
cur.execute(sqlStr)
lambdaT
2013 年 9 月 19 日
变量不一致,改一下
likuku
2013 年 9 月 19 日
嗯,字符串替代就是这样子的:

print "this is test str: %s" % (test_str)
est
2013 年 9 月 23 日
日。7楼说对了。

SQL真是一坨屎。说到底还是拼字符串。万一表名里包含 ` ; ' 等特殊字符就happy了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://v2ex.xtra.eu.org/t/82835

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX