【问题标题】:How to import data to a database in python 3.4 from a csv file using sqlite3如何使用 sqlite3 从 csv 文件将数据导入 python 3.4 中的数据库
【发布时间】:2014-12-02 05:00:20
【问题描述】:

我目前正在为我的 A 级计算课程作业编写程序。我正在尝试使用 Python 3.4 中的 sqlight3 将数据从 csv 文件导入数据库。我已经尝试了几个例子,但我似乎无法让它们中的任何一个工作。我对python知之甚少,因此将不胜感激。

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()

每次我运行代码时都会返回以下错误消息:

Traceback(最近一次调用最后一次): 文件“G:\Computing\A2\Coursework\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,posted_date,posted_date_time,order_item_code,merchant_order_item_id,merchant_adjustment_item sqlite3.OperationalError:靠近“%”:语法错误

我了解语法不正确,我正在寻找一种将数据插入适当列的方法。

【问题讨论】:

  • 如果这是 A-Level 课程,您可能需要说明您从这里获得了帮助。

标签: csv python-3.x sqlite


【解决方案1】:

documentation 说:

参数可以有多种形式:
?NNN
?
:AAAA
@AAAA
$AAAA

%s 不是其中之一。

【讨论】:

    【解决方案2】:

    看起来您缺少 % 运算符。相反,您处于昏迷状态,这会导致错误。

    改成这样:

    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()
    

    【讨论】:

      猜你喜欢
      • 2011-02-22
      • 2012-08-05
      • 2012-10-24
      • 1970-01-01
      • 1970-01-01
      • 2013-02-19
      • 2013-09-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多