2013-08-06 49 views
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,它使用了相同的腳本,我正在做同樣的事情。Python OpenERP 7壞的幻數

我的導入文件看起來是這樣的:

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 

我創建兩個PY文件,並使用宙斯的Windows .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

不可思議的數字錯誤根本不是特定於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]) 

您可以this guide如果你想你的代碼轉換爲Python 3的開始,但它不是小事如果您不熟悉像編碼,字節串與Unicode字符串等Python概念,尤其是在涉及文件讀取操作時(如此處)。 在你的腳本,你通常需要更正print呼叫並改變open這種形式(如the documentation所示):

reader = csv.reader(open('products_import.csv', 'r', newline='')) 
+0

好,版型的差異是顯而易見的,我只是沒想到這件事 - OpenERP運行2.6.或2.7,這就是我應該嘗試的 - 這是一個漫長的一週:)我要在完全不同的機器上嘗試它,但沒有安裝任何其他Python版本並查看會發生什麼。我會發布結果。謝謝你的幫助! – JimB

+0

更新:我用一個乾淨安裝的openerp在另一臺機器上運行腳本。我拿出插入語句,然後讓腳本打印出csv行。它第一次運行良好,沒有不好的幻數錯誤或語法錯誤,看着它在幾秒鐘內滾動通過12k +行......第二次,我跑了它,它只是用編輯器打開腳本......怎麼了接着就,隨即?開始討厭python ... – JimB