【问题标题】:python psycogp2 inserting into postgresql helppython psycopg2插入postgresql帮助
【发布时间】:2011-05-06 01:29:09
【问题描述】:

我有以下代码可以插入到我的 postgresql 数据库中

conn = psycopg2.connect("my connection setting are in here")
cur = conn.cursor()
cur.execute('INSERT INTO src_event (location_id, catname, title, name) VALUES (%i, \"%s\", \"%s\", \"%s\")' % (1441, "concert", item['title'], item['artists'] )) 

但是,当我运行它时,我收到以下错误:

psycopg2.ProgrammingError: column "concert" does not exist
LINE 1: ...(location_id, catname, title, name) VALUES (1441, concert, "...

但是“音乐会”不是一个列,它是一个值,所以我不明白为什么会出现这个错误。

编辑 - 我尝试将 \" 围绕价值音乐会并尝试不使用

如何在不出现此错误的情况下插入我的数据?

【问题讨论】:

    标签: python sql postgresql psycopg2


    【解决方案1】:

    你真的,真的不应该使用 python 字符串格式来构建查询——它们很容易出现SQL injection。而您的实际问题是您使用 " 进行引用,而您必须使用 ' 进行引用(" 引用表/列名等,' 引用字符串)。

    请改用以下代码:

    cur.execute('INSERT INTO src_event (location_id, catname, title, name) VALUES (%s, %s, %s, %s)', (1441, 'concert', item['title'], item['artists']))
    

    请注意,无论您实际拥有哪种类型,都必须使用 %s

    另见http://initd.org/psycopg/docs/usage.html#query-parameters

    【讨论】:

    • 谢谢,这消除了那个错误,但现在我得到了 exceptions.TypeError: int argument required。唯一应该是 int 的字段之一是 catname,它是一个 int。
    • 您必须对所有值使用%s,即使是 int 值。我一开始就错了,然后编辑了我的答案。您可能复制了错误的代码。
    猜你喜欢
    • 1970-01-01
    • 2021-06-13
    • 1970-01-01
    • 2012-05-07
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多