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

时间:2014-10-12 12:14:23

标签: 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)
                    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

这让我相信我不能这样做,所以我想问我怎么能这样做,所以我最终可以在表中传递一个变量名,而不是每次都要硬编码。 / p>

1 个答案:

答案 0 :(得分:8)

显示mysql连接器的异常告诉您数据库中不存在该表。

另外,你试图使用'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")