1

我一直在产品表上测试 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 目录中并从那里尝试,现在我在“打印行 [1]”行上遇到语法错误...... wth?

4

1 回答 1

1

bad magic number 错误根本不是 OpenERP 特有的,它与 Python 内部有关。

正如您可能在其他问题中读到的那样,这通常是使用.pyc由不同版本的 Python 生成的 Python 文件的症状。您是否确保全部删除您可以在 Python 脚本旁边找到的所有*.pyc文件*.pyo,如其他问题中所述?如果您最初尝试使用 Python 3 运行脚本(但由于语法错误而失败),则需要先删除这些工件,然后才能使用 Python 2 运行它们。

至于您尝试使用 Python 3 运行脚本时遇到的语法错误,这是因为您的脚本使用了 Python 2 语法。在 Python 3print中不再是关键字,它是您需要像普通函数一样调用的内置函数:

print(row[1])

如果您想将代码转换为 Python 3,您可以从本指南开始,但如果您不熟悉编码、字节串与 Unicode 字符串等 Python 概念,这并非易事,尤其是在涉及文件读取操作时,例如这里。在您的脚本中,您通常需要更正print调用并将其更改open为这种形式(如文档中所示):

reader = csv.reader(open('products_import.csv', 'r', newline=''))
于 2013-08-07T09:11:13.837 回答