用变量替换表名。使用python和mysql连接器

用变量替换表名。使用python和mysql连接器,python,mysql,mysql-connector,Python,Mysql,Mysql Connector,我想动态更改我插入数据的表的变量名 这目前是可行的 def dataEntry(subreddit, _title, _post_url, _imageURL): cnx = mysql.connector.connect(**config) c = cnx.cursor() insert = ("""INSERT INTO FoodPorn (subreddit, title, post_url, imageURL)

我想动态更改我插入数据的表的变量名

这目前是可行的

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

这让我相信我不能这样做,所以我想问一下,我如何才能这样做,以便最终将变量名传递到表中,而不是每次都要硬编码。

显示mysql connector的异常是,该表在数据库中不存在

此外,您试图使用“MachinePorn”作为参数,但您没有在查询中定义它,它是硬编码的“subredditName”

我认为您应该将数据库定义为查询中的另一个参数,它将正常运行:

def dataEntry(subreddit, _title, _post_url, _imageURL):
     cnx = mysql.connector.connect(**config)

     c = cnx.cursor()
     insert = cnx.escape_string("INSERT INTO MachinePorn (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")

这部分是正确的。不能在准备好的语句中参数化表名。您需要手动将查询字符串与(最好通过
cnx.escape_string()
转义)表名连接起来。但它使用的是符合DB API v2.0的mysql.connector。为什么它应该手动替换字符串?请参阅@spoticouscompiler我已经按照您的建议编辑了代码。mysql连接器库中不存在escape_字符串方法,如果您使用MySQLdb,则可以调用它。这里包含并记录了escape_字符串-