Psycopg2没有提交更改

时间:2016-01-20 20:52:38

标签: python postgresql python-3.x

这是我的代码:

conn = psycopg2.connect("dbname='%s' user='%s' host='%s' password='%s' port='%s'" % (db, user, server, password, port))
cursor = conn.cursor()
cursor.execute("UPDATE bazos_ads SET price = replace(price, 'Zadarmo', '-5')")
cursor.execute("UPDATE bazos_ads SET price = replace(price, 'Nerozhoduje', '-4')")
cursor.execute("UPDATE bazos_ads SET price = replace(price, 'Ponúknite', '-3')")
cursor.execute("UPDATE bazos_ads SET price = replace(price, 'Dohodou', '-2')")
cursor.execute("UPDATE bazos_ads SET price = replace(price, 'V texte', '-1')")
cursor.execute("UPDATE bazos_ads SET price = replace(price, '€', '')")
cursor.execute("UPDATE bazos_ads SET price = replace(price, ' ', '')")

cursor.execute("TRUNCATE infinity_ads")
conn.commit()

cursor.execute('INSERT INTO infinity_ads (site,category,link,number,image,title,info,price,date,locality) SELECT site,category,link,number::integer,image,title,info,price::integer,date::date,locality FROM bazos_ads')
cursor.execute("TRUNCATE bazos_ads")
conn.commit()
conn.close()

我需要使用TextFields修改数据库中的列,这样我就可以将它们复制到具有指定列类型的第二个数据库中(在本例中为Integrer)。如果我复制这些SQL并在PSQL中逐个运行它可以正常工作。但是,如果我尝试在python中运行此代码,我会收到此错误信息:

psycopg2.DataError: invalid input syntax for integer: "6€"

所以我猜psycopg2没有提交更改,或者替换€符号还有另一个问题,但我无法理解,因为在PSQL中它可以正常工作。

编辑:我仍然无法找到解决办法,但至少这项工作是:

#!/bin/bash
psql -U name-d pass-c "UPDATE bazos_ads SET price = replace(price, 'Zadarmo', '-5')"
...

1 个答案:

答案 0 :(得分:0)

psycopg2.DataError: invalid input syntax for integer: "6€"

在这种情况下,您的数据显然不是整数,因此psycopg2无法将€存储到Integer列中。如果用整数替换字符串,则可以将结果存储在Integer列中,否则replace函数的结果不是整数,因此在存储值时会抛出错误。

#!/bin/bash
psql -U name-d pass-c "UPDATE bazos_ads SET price = replace(price, 'Zadarmo', '-5')"

这是有效的,因为你用-5替换了一个字符串,它是Postgre输入的整数,可以正确地存储在目标列中。