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

2013-09-17 20:23:31 +08:00
 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~
6919 次点击
所在节点    Python
13 条回复
est
2013-09-17 20:31:59 +08:00
试试吧%s改成 ?
delo
2013-09-17 21:01:11 +08:00
把 execute参数里 i 前面的逗号改成%(不知道我理解对不对… )
roricon
2013-09-17 21:05:55 +08:00
cur.execute("""CREATE TABLE IF NOT EXISTS {0} (num VARCHAR(25))""".format(i))
cloverstd
2013-09-17 22:24:25 +08:00
%s 改为 ?
或者 ,i 改为 % (i)
msg7086
2013-09-18 15:47:04 +08:00
@est
@delo
@roricon
@cloverstd
同学们…… 以「变量名」为表名。

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

print "this is test str: %s" % (test_str)
est
2013-09-23 10:23:22 +08:00
日。7楼说对了。

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

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

https://www.v2ex.com/t/82835

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

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

© 2021 V2EX