我这里有一行代码:
query = """SELECT v.retailiqpo_ordernumber
FROM public.vmi_purchase_orders v
WHERE v.vendor_account = {}""".format(str(primary_account_number))
我试图加载数字的字符串值,但psycopg2仍然会抛出此错误。
psycopg2.ProgrammingError: operator does not exist: character varying = integer
我有什么选择来确保Psycopg2将其视为字符串?或者我应该只将数据库的整体结构更改为整数?
答案 0 :(得分:2)
让psycopg2为您插入查询参数(几乎)总是更好。 (http://initd.org/psycopg/docs/usage.html#the-problem-with-the-query-parameters)
query = """SELECT v.retailiqpo_ordernumber
FROM public.vmi_purchase_orders v
WHERE v.vendor_account = %s"""
cur.execute(query, (str(primary_account_number),))
这样psycopg2将根据传递的python值的类型处理正确的类型格式。
答案 1 :(得分:1)
使用
query = """
SELECT v.retailiqpo_ordernumber
FROM public.vmi_purchase_orders v
WHERE v.vendor_account = '{}'
""".format(primary_account_number)
这样查询中的数字就会作为字符串传递 - 如果c.vendor_account
是的字符串类型(varchar ie)。重要的部分是'
之前/之后{}
,因此查询字符串将其视为字符串。
击>
正如Jon Clements所指出的那样,最好让api处理转换:
query = """
SELECT v.retailiqpo_ordernumber
FROM public.vmi_purchase_orders v
WHERE v.vendor_account = %s
"""
cursor.execute(query, (str(primary_account_number),)