【问题标题】:Error executing INSERT statement via python (PostgreSQL)通过 python (PostgreSQL) 执行 INSERT 语句时出错
【发布时间】:2019-12-28 09:15:20
【问题描述】:

我正在尝试将一些数据插入到名为 MonitorList 的表中。 style_code 是一个字符串(例如:12345、AA12345、CJ91412。)

代码如下: cursor.execute('''INSERT INTO "MonitorList" VALUES (%(style_code)s)''', {'style_code': style_code})

我收到此错误: Exception: syntax error at or near "bb1111111"

我尝试在 pgadmin 查询编辑器中手动执行查询。任何没有字母的数据,例如 111111 或 1111-111 都可以完全插入。但是每当我尝试插入其中包含字母的数据时,例如 BB1111111,我都会收到此错误:

LINE 1: INSERT INTO "MonitorList" VALUES (BB1111111)
                                          ^
SQL state: 42703
Character: 35

我已经尝试在查询中指定列名,如下所示:

INSERT INTO "MonitorList" ("StyleCode") VALUES (BB1111111)

但这并没有解决问题。我能够手动插入带有字母的数据的唯一方法是使用此查询(在数据中添加单引号:

INSERT INTO "MonitorList" ("StyleCode") VALUES ('BB1111111')

但是,在 python 代码中在 %(style_code)s 周围添加单引号并不能解决问题。

MonitorList 表只有 1 列(主键,不能为空,数据类型:文本)有什么想法吗?

【问题讨论】:

  • 检查MonitorList表中列的数据类型。
  • @dassum 是“文本”
  • 请分享你的python代码。

标签: python postgresql psycopg2 pgadmin-4


【解决方案1】:

你可以试试下面的代码

style_code_val = style_code

query =  "INSERT INTO MonitorList (StyleCode) VALUES (%s);"
data = (style_code_val)

cursor.execute(query, data)

【讨论】:

  • 刚刚试过,同样的。任何不包含字母的东西都可以正常插入,但是添加任何字母都不起作用
【解决方案2】:

评论太长了。

这是一个简单的测试。以同样的方式检查您的代码。

>>> import psycopg2
>>> conn = psycopg2.connect('')
>>> cur = conn.cursor()
>>> a = 'b'
>>> cur.mogrify('select %s', a)
"select 'b'"
>>> cur.mogrify('select %(a)s', {'a': a})
"select 'b'"
>>> type(a) # Note this:
<type 'str'>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-30
    • 2017-10-20
    • 1970-01-01
    • 2022-09-29
    • 1970-01-01
    • 1970-01-01
    • 2019-04-09
    • 2017-08-28
    相关资源
    最近更新 更多