【问题标题】:Insert query with variables postgresql python使用变量 postgresql python 插入查询
【发布时间】:2017-11-21 10:56:42
【问题描述】:

我正在尝试使用 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 不同的方法,效果很好。

【问题讨论】:

    标签: python postgresql psycopg2


    【解决方案1】:

    您以错误的方式传递参数。传递的参数给你带来了麻烦。使用 format 函数而不是 %,因为它更复杂和可读。

    "INSERT INTO {} (sender, receiver, message) VALUES({},{},{})".format("some", "world", "world","hello")
    

    上面的输出:

    'INSERT INTO some (sender, receiver, message) VALUES(world,world,hello)'
    

    【讨论】:

    • with: cursor.execute("INSERT INTO {} (sender, receiver, message) VALUES({},{},{}).format(username, "one", "two", “三”))我得到:>psycopg2.ProgrammingError:列“一”不存在第1行:...SERT INTO测试(发送者,接收者,消息)值(一,二,th ...
    • 查看我上面的回复
    • @LudvigKnutsmark 您的错误来自错误的查询,但字符串的格式正确。检查您插入的表是否存在并且列名是否正确。如果您遇到另一个错误,请提出一个新问题。
    【解决方案2】:

    使用高级别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))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-17
      • 1970-01-01
      • 2016-02-27
      • 2022-11-03
      • 1970-01-01
      • 2015-09-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多