2016-01-20 42 views
1

这是我的代码:Psycopg2不commiting改变

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() 

我需要修改与TextField的数据库列,以便我能够将它们复制到第二个数据库,指定列类型(Integrer在这种情况下)。如果我复制这些SQL并在PSQL中逐一运行,它就可以工作。但是,如果我尝试运行在python这个代码,我得到这个错误messagge:

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

所以我想psycopg2不commiting变化或者没有与替换€符号另一个问题,但我无法弄清楚,因为在PSQL它工作正常。

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

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

回答

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打字的整数,可以适当存储在目标列。