将CSV插入sqlite3

时间:2020-02-26 09:33:21

标签: python sql pandas sqlite csv

我有一个包含两列的csv文件。我创建了一个名为beacon的数据库,该数据库使用col1和col2。我尝试了两种不同的方式,一种使用熊猫,另一种不使用。两种方式都可以使我很好地读取csv文件,但是我认为它们实际上并未将这两列添加到我的数据库中!

第一种方法

import sqlite3
import pandas as pd
from pandas import DataFrame

conn = sqlite3.connect('MyDB.db')  
c = conn.cursor()

read_beacon = pd.read_csv (r'/Users/seifeldeen/Downloads/BeaconID&ACID.csv')
read_beacon.to_sql('beacon', conn, if_exists= 'append', index = False)
conn.commit()
df = DataFrame(c.fetchall(), columns=['col1','col2'])
print (df)
export_csv = df.to_csv (r'/Users/seifeldeen/Downloads/export_list.csv', index = None,         header=True) 

第二种方法

import csv, sqlite3

con = sqlite3.connect("MyDB.db'")
cur = con.cursor()
cur.execute("CREATE TABLE t (col1, col2);") 

with open('BeaconID&ACID.csv','r') as fin: 
    dr = csv.DictReader(fin) # comma is default delimiter
    to_db = [(i['col1'], i['col2']) for i in dr]

cur.executemany("INSERT INTO n (col1, col2) VALUES (?, ?);", to_db)
con.commit()
con.close

此外,我确保csv列和beacon表使用相同的列名。 预先感谢!

1 个答案:

答案 0 :(得分:0)

我认为检查数据是否写入db的方式存在一些缺陷: df = DataFrame(c.fetchall(), columns=['col1','col2'])

您从未使用游标(c)执行查询,而尝试使用c.fetchall()。这将始终返回空列表[]。

import pandas as pd
import sqlite3

df = pd.read_csv('test.csv')

conn = sqlite3.connect('test.db')
cursor = conn.cursor()

df.to_sql('test', conn, if_exists='append', index=False)
conn.commit()

cursor.execute('SELECT * from test')
cursor.fetchall() # this should return a list of all entries in your db
相关问题