2014-10-07 69 views
0

我目前正在爲我的A級計算課程工作編寫一個程序。我正嘗試使用Python 3.4中的sqlight3將數據從csv文件導入到數據庫中。我已經嘗試了幾個例子,但我似乎無法讓他們中的任何人工作。我幾乎沒有Python的知識,所以幫助將不勝感激。如何使用sqlite3從csv文件將數據導入到python 3.4中的數據庫

import sqlite3 
new_db = sqlite3.connect(':memory:') 
c=new_db.cursor() 
import csv 


c.execute('''CREATE TABLE data 
(settlement_id, 
settlement_start_date, 
settlement_end_date, 
deposit_date, 
total_amount, 
currency, 
transaction_type, 
order_id, 
merchant_order_id, 
adjustment_id, 
shipment_id, 
marketplace_name, 
amount_type, 
amount_description, 
amount, 
fulfillment_id, 
posted_date, 
posted_date_time, 
order_item_code, 
merchant_order_item_id, 
merchant_adjustment_item_id, 
sku, 
quantity_purchased, 
promotion_id) 
''') 


with open('testdata1.csv', newline='') as f: 
reader = csv.reader(f) 
for column in reader: 
    settlement_id = column[0] 
    settlement_start_date = column[1] 
    settlement_end_date = column[2] 
    deposit_date = column[3] 
    total_amount = column[4] 
    currency = column[5] 
    transaction_type = column[6] 
    order_id = column[7] 
    merchant_order_id = column[8] 
    adjustment_id = column[9] 
    shipment_id = column[10] 
    marketplace_name = column[11] 
    amount_type = column[12] 
    amount_description = column[13] 
    amount = column[14] 
    fulfillment_id = column[15] 
    posted_date = column[16] 
    posted_date_time = column[17] 
    order_item_code = column[18] 
    merchant_order_item_id = column[19] 
    merchant_adjustment_item_id = column[20] 
    sku = column[21] 
    quantity_purchased = column[22] 
    promotion_id = column[23] 


    c.execute('''INSERT into data (settlement_id,settlement_start_date,settlement_end_date,deposit_date,total_amount,currency,transaction_type,order_id,merchant_order_id,adjustment_id,shipment_id,marketplace_name,amount_type,amount_description,amount,fulfillment_id,posted_date,posted_date_time,order_item_code,merchant_order_item_id,merchant_adjustment_item_id,sku,quantity_purchased,promotion_id) 
       values (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)''', 
       (settlement_id,settlement_start_date,settlement_end_date,deposit_date,total_amount,currency,transaction_type,order_id,merchant_order_id,adjustment_id,shipment_id,marketplace_name,amount_type,amount_description,amount,fulfillment_id,posted_date,posted_date_time,order_item_code,merchant_order_item_id,merchant_adjustment_item_id,sku,quantity_purchased,promotion_id)) 
    db.commit() 



new_db.close() 

我每次運行,返回以下錯誤消息代碼:

回溯(最近通話最後一個): 文件 「G:\計算\ A2 \習作\ SQL2.py」,行66,在 (settlement_id,settlement_start_date,settlement_end_date,deposit_date,total_amount,currency,transaction_type,order_id,merchant_order_id,adjustment_id,shipment_id,marketplace_name,amount_type,amount_description,amount,fulfillment_id,posting_date,posting_date_time,order_item_code,merchant_order_item_id,merchant_adjustment_item_id,sku,quantity_purchased ,promotion_id)) sqlite3.OperationalError:接近「%」:語法錯誤

我明白,語法是不正確的,我正在尋找一種方法,將數據插入到適當的列。

+0

如果這是A-Level的課程,你可能需要聲明,你從這裏獲得了幫助。 – matsjoyce 2014-10-07 17:21:34

回答

0

documentation說:

Parameters can take several forms:
?NNN
?
:AAAA
@AAAA
$AAAA

%s是不是其中之一。

0

看起來像缺少%操作符。你有昏迷,這會導致錯誤。

改成這樣:

c.execute('''INSERT into data (settlement_id,settlement_start_date,settlement_end_date,deposit_date,total_amount,currency,transaction_type,order_id,merchant_order_id,adjustment_id,shipment_id,marketplace_name,amount_type,amount_description,amount,fulfillment_id,posted_date,posted_date_time,order_item_code,merchant_order_item_id,merchant_adjustment_item_id,sku,quantity_purchased,promotion_id) 
       values (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)''' % (settlement_id,settlement_start_date,settlement_end_date,deposit_date,total_amount,currency,transaction_type,order_id,merchant_order_id,adjustment_id,shipment_id,marketplace_name,amount_type,amount_description,amount,fulfillment_id,posted_date,posted_date_time,order_item_code,merchant_order_item_id,merchant_adjustment_item_id,sku,quantity_purchased,promotion_id)) 

%運算符將跨值傳遞。

這樣說,%運算符正在緩慢地從Pyhton 3中淡出,而應該使用format命令。

事實上,你的代碼可以大大提高,像這樣:

with open('testdata1.csv', newline='') as f: 
    reader = csv.reader(f) 
    for column in reader: 
     c.execute('INSERT into data VALUES {}'.format(column)) 
    new_db.commit() 
相關問題