1
我想动态地改变我插入数据的表的变量名。用变量替换表名。使用python和mysql连接器
这个当前工作,
def dataEntry(subreddit, _title, _post_url, _imageURL):
cnx = mysql.connector.connect(**config)
c = cnx.cursor()
insert = ("""INSERT INTO FoodPorn
(subreddit, title, post_url, imageURL)
VALUES (%s, %s, %s, %s)""")
data_value = (subreddit, _title, _post_url, _imageURL)
c.execute(insert, data_value)
cnx.commit()
c.close()
cnx.close()
dataEntry("fake", "fake", "fake", "fake")
但是当我试图在这种情况下,“FoodPorn”表名做同样的,但对于一个动态的,如在这个例子中MachinePorn,
def dataEntry(subreddit, _title, _post_url, _imageURL):
cnx = mysql.connector.connect(**config)
c = cnx.cursor()
insert = ("""INSERT INTO subredditName
(subreddit, title, post_url, imageURL)
VALUES (%s, %s, %s, %s, %s)""")
data_value = ("MachinePorn", subreddit, _title, _post_url, _imageURL)
c.execute(insert, data_value)
cnx.commit()
c.close()
cnx.close()
dataEntry("fake", "fake", "fake", "fake")
我得到这个错误,
mysql.connector.errors.ProgrammingError: 1146 (42S02): Table 'sytykr.subredditname' doesn't exist
这使我相信,我不能做这种方式,所以我禾我想问我该怎么做,以便我最终可以在表中传递一个变量名,而不是每次都要硬编码。
这部分是正确的。您无法在预准备语句中对表名进行参数化。您需要手动连接查询字符串(最好通过'cnx.escape_string()')转义表名。 – 2015-02-12 00:19:20
但它使用的是符合DB API v2.0的mysql.connector。为什么它应该手动扫描字符串? – 2015-02-12 00:27:14
查看http://stackoverflow.com/questions/11312737/can-i-parameterize-the-table-name-in-a-prepared-statement – 2015-02-12 16:44:24