使用变量postgresql python插入查询

时间:2017-06-19 09:33:36

标签: python postgresql psycopg2

我试图使用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中选择一种完美运作的不同方法。

2 个答案:

答案 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))