【发布时间】:2019-03-07 20:10:27
【问题描述】:
我知道那里还有其他一些帖子,但我找不到我想到的具体问题。 我正在使用 US_baby_names csv 文件。并希望将此csv文件逐行导入sqlite3作为表格。
我能够创建名为 storage 的表。 然后我试图读取 csv 文件中的行并将其放入该表中,但我一定是做错了什么。
import sqlite3 as sql
from sqlite3 import Error
import csv
def CreateConnection ( dbFileName ):
try:
conn = sql.connect(dbFileName)
return conn
except Error as e:
print(e)
return None
def CreateNew( dbConnection, new):
sql = """INSERT INTO storage (dat, Id, Name, Year, group, subgroup, Count)
VALUES (?,?,?,?,?,?,?)"""
try:
cursor = dbConnection.cursor()
cursor.execute(sql, new)
return cursor.lastrowid
except Error as e:
print(e)
def Main():
database = "storage.db"
dbConnection = CreateConnection(database)
with open('storage.csv', 'rb') as fin:
dr = csv.DictReader(fin)
to_db = [(i['dat'], i['Id'], i['Name'], i['Year'], i['group'], i['subgroup'], i['Count']) \
for i in dr]
cursor.executemany(CreateNew(sql, to_db))
dbConnection.close()
if __name__ == "__main__":
Main()
我相信我的 cursor.executemany 是错误的,但我不知道还能做什么..
谢谢
【问题讨论】:
-
使用函数打开数据库连接并返回连接是个坏主意。使用上下文管理器。您将一个执行数据库事务的函数传递给 executemany,这根本不起作用