这是我的代码:
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')"
...
答案 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输入的整数,可以正确地存储在目标列中。