python数据库插入格式

python数据库插入格式,python,database,postgresql,Python,Database,Postgresql,我试图在Python3.6中插入postgresql数据库,目前正在尝试执行这一行 cur.execute("INSERT INTO "+table_name+"(price, buy, sell, timestamp) VALUES (%s, %s, %s, %s)",(exchange_rate, buy_rate, sell_rate, date)) 但每次它尝试运行时,表名周围都有“”,因此结果就像INSERT-INTO-table_-name'12'、…、…、。。。而

我试图在Python3.6中插入postgresql数据库,目前正在尝试执行这一行

        cur.execute("INSERT INTO "+table_name+"(price, buy, sell, timestamp) VALUES (%s, %s, %s, %s)",(exchange_rate, buy_rate, sell_rate, date))
但每次它尝试运行时,表名周围都有“”,因此结果就像INSERT-INTO-table_-name'12'、…、…、。。。而不是
插入到表\u name12。。。如何使字符串格式化程序省略引号或删除引号或其他内容?它会导致12左右的语法错误,因为它不需要单引号。

将其与三引号一起使用。也可以将表_名称作为第二个参数的元素传递

 cur.execute("""INSERT INTO %s (price, buy, sell, timestamp) VALUES (%s, %s, %s, %s)""",(table_name, exchange_rate, buy_rate, sell_rate, date))
更详细的方法

三重qoutes使开发人员可以将SQL查询编写为多行

它还允许您使用单qoutes和双qoutes,而无需逃避它们。它是复杂SQL查询的受益者,但在您的案例中不需要它


使用新的字符串格式可获得清晰的表示形式。%s显式转换为字符串,您不希望这样。“格式”为您选择最合适的类型

table_name = "myTable"
exchange_rate = 1
buy_rate = 2
sell_rate = 3
date = 123
x = "INSERT INTO {0} (price, buy, sell, timestamp) VALUES ({1}, {2}, {2}, {4})".format(
    table_name, exchange_rate, buy_rate, sell_rate, date)

print x
>INSERT INTO myTable (price, buy, sell, timestamp) VALUES (1, 2, 2, 123)

使用三重引号cur.execute“”不要这样做,即不要使用字符串格式,这将使您的代码容易受到sql注入攻击。改为使用查询参数。始终将完整的错误消息回溯作为文本,而不是屏幕截图。还有其他有用的信息。除了当我把表名加回去时,它会抱怨在“my_table”中插入的表周围的引号。。。不应该在my_表中使用引号。如何避免这种情况?为什么您不使用我们分享和解释的方法?正如@redneb所说,您的方法容易受到注入攻击。解释一下您的目的,我们可能会找到另一个解决方案来满足您的需要。我完全按照您的注释进行了操作,因此表名的前%s被包装在“”中。这是一个语法错误,正在中断查询。我错过了什么吗?我做了这个,它似乎是工作,除了日期不再有引号围绕它。有没有办法让{4}只加引号?\{}帮我做的