我试图使用python在postgres上的插入查询中插入几个变量。我无法理解如何使用字符串格式。
例如,这很好用:
cursor.execute('''CREATE TABLE %s
(id SERIAL PRIMARY KEY,
sender varchar(255) not null,
receiver varchar(255) not null,
message varchar(255))''' %username)
就像这样:
cursor.execute('''INSERT INTO test (sender, receiver, message)
VALUES(%s,%s,%s)''', (sender, receiver,message))
我的问题是我想将表名作为变量。我试过了:
cursor.execute('''INSERT INTO %s (sender, receiver, message)
VALUES(%s,%s,%s)''' %username, (sender, receiver, message))
我收到以下错误:
TypeError:格式字符串
的参数不足
我知道我必须以某种方式更改括号,但我不知道如何。
提前致谢。
编辑:
从这个psycopg2中选择一种完美运作的不同方法。
答案 0 :(得分:1)
你以错误的方式传递参数。通过的论点给你带来了麻烦。使用format函数代替%,因为它更复杂和可读。
"INSERT INTO {} (sender, receiver, message) VALUES({},{},{})".format("some", "world", "world","hello")
以上的输出:
'INSERT INTO some (sender, receiver, message) VALUES(world,world,hello)'
答案 1 :(得分:0)
使用高级sql
module来避免可能的错误:
from psycopg2 import sql
query = sql.SQL('''
insert into {} (sender, receiver, message)
values (%s, %s, %s)
''').format(sql.Identifier(username))
cursor.execute (query, (sender, receiver, message))