我一直在测试产品表上的OpenERP导入。我有25k +产品要导入,OpenERP导入真的非常慢......所以,我遇到了一个直接导入PostgresQL的脚本。我试过了,我得到了一个“错误的魔法数字”错误。我看了这个视频:http://www.firstclasscomputerconsulting.com/OpenERP/OpenERP70Videos/tabid/145/articleType/ArticleView/articleId/3/Import-data-into-OpenERP-7-using-direct-PostGRES-method.aspx,它使用相同的脚本而且我做的完全相同。
我的导入文件如下所示:
Rabbit Patch 6x10 Chart/Black,0.01,0.01
DAZL-HARES EAR DK DUN PER LB,0.01,0.01
SQUIRREL DUBBING MED H.E./LB!,0.01,0.01
我使用Zeus for windows创建了py文件和.csv。
我在这个网站上读到了这个错误的其他线程,但是我没有看到与OpenERP一起引用这个问题。
这是脚本:
import csv
import psycopg2
conn_string = "dbname='OpenERP' user='openpg' password='openpgpwd'"
conn = psycopg2.connect(conn_string)
cursor = conn.cursor()
reader = csv.reader(open('products_import.csv','rb'))
for row in reader:
print row[1]
statement = "INSERT INTO product_template (name,standard_price,list_price,mes_type,uom_id,uom_po_id," \
"type,procure_method,cost_method,categ_id,supply_method,sale_ok) VALUES ('" + row[1] + "'," \
+ str(row[2]) + "," + str(row[2]) + ",'fixed',1,1,'product','make_to_stock','standard',1,'buy',True) RETURNING id"
cursor.execute(statement)
conn.commit()
templateid = cursor.fetchone()[0]
statement = "INSERT INTO product_product (product_tmpl_id,default_code,active,valuation) VALUES \
(" + str(templateid) + ",'" + row[0] + "',True,'manual_periodic')"
cursor.execute(statement)
conn.commit()
有什么建议吗?
我将py文件和csv复制到我的Python33目录并尝试从那里开始,现在我在“print row [1]”行上出现了语法错误...是吗?
答案 0 :(得分:1)
糟糕的幻数错误并非特定于OpenERP,它与Python内部相关。
正如您可能已经阅读过其他问题一样,这通常是使用不同版本的Python生成的Python .pyc
文件的症状。您是否已确保删除所有可在Python脚本旁边找到的*.pyc
或*.pyo
文件,例如, in this other question?
如果您最初尝试使用Python 3运行脚本(由于语法错误而失败),则需要先删除这些工件,然后才能使用Python 2运行它们。
至于尝试使用Python 3运行脚本时遇到的语法错误,这是因为您的脚本使用Python 2语法。在Python 3 print
不再是关键字,它是内置函数,您需要像普通函数一样调用:
print(row[1])
如果你想将你的代码转换为Python 3,你可以从this guide开始,但如果你不熟悉Python编码,字符串和unicode字符串等Python概念,那就不是一件容易的事了,特别是当文件时阅读操作涉及到,就像这里一样。
在您的脚本中,您通常需要更正print
来电,并将open
更改为此表单(如the documentation所示):
reader = csv.reader(open('products_import.csv', 'r', newline=''))