Python OpenERP 7恶魔数

时间:2013-08-06 21:59:18

标签: python openerp

我一直在测试产品表上的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]”行上出现了语法错误...是吗?

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=''))