Python:从文件csv加载数据将整个数据插入.db并在表上进行操作

我目前正在学习python语言。这是我的问题,我将.txt文件转换为.csv,然后要插入表到数据库文件。我对底部即时贴的结果进行迭代有问题。我该如何迭代呢?我在那几天苦苦挣扎,所以真的不知道如何解决问题。

txt文件(几行):

class

Python:

id,id2,album,artysta
TRMMMYQ128F932D901,SOQMMHC12AB0180CB8,Faster Pussy cat,Silent Night
TRMMMKD128F425225D,SOVFVAK12A8C1350D9,Karkkiautomaatti,Tanssi vaan
TRMMMRX128F93187D9,SOGTUKN12AB017F4F1,Hudson Mohawke,No One Could Ever
TRMMMCH128F425532C,SOBNYVR12A8C13558C,Yerba Brava,Si Vos Querés
TRMMMWA128F426B589,SOHSBXH12A8C13B0DF,Der Mystic,Tangle Of Aspens
TRMMMXN128F42936A5,SOZVAPQ12A8C13B63C,David Montgomery,"Symphony No. 1 G minor ""Sinfonie Serieuse""/Allegro con energia"
TRMMMLR128F1494097,SOQVRHI12A6D4FB2D7,Sasha / Turbulence,We Have Got Love
TRMMMBB12903CB7D21,SOEYRFT12AB018936C,Kris Kross,2 Da Beat Ch'yall

输出:

from io import StringIO
import pandas as pd
import numpy as np
import os
import sqlite3,csv

save_path = r"C:\Users\Maticz\Desktop\python"
#konwerter txt -> csv
in_file = os.path.join(save_path,"tracks.txt")
out_file = os.path.join(save_path,"Output.csv")
#df = pd.read_csv(in_file,sep="<SEP>",engine='python')
#df.to_csv(out_file,index=False)
#print(df)

df = pd.read_csv(r'C:\Users\Maticz\PycharmProjects\zadanie\tracks.txt',delimiter='<SEP>',engine='python',names=["id","id2","album","artysta"])
print(df.head(5))
sv = df.to_csv(r'C:\Users\Maticz\PycharmProjects\zadanie\tracks.csv',index = None,header=True)
con = sqlite3.connect("artists.db")
cur = con.cursor()

cur.execute("CREATE TABLE IF NOT EXISTS tabela (id TEXT,id2 TEXT,album TEXT,artysta TEXT);")

with open(r'C:\Users\Maticz\PycharmProjects\zadanie\tracks.csv','a+') as fin:
    dr = pd.read_csv(fin,delimiter=',',"artysta"]) # comma is default delimiter
    to_db = [(i['id'],i['id2'],i['album'],i['artysta']) for i in dr]
    cur.executemany("INSERT INTO tabela (id,artysta) VALUES (?,?,?);",to_db)
con.commit()
cur.execute("SELECT * FROM artists")
print(cur.fetchall())
con.close()

感谢您的帮助:)

zkl829602 回答:Python:从文件csv加载数据将整个数据插入.db并在表上进行操作

您可以使用sqlalchemy简化操作

from sqlalchemy import create_engine
# sqlite://<nohostname>/<path>
# where <path> is relative:
engine = create_engine('sqlite:///artists.db')
df.to_sql('tabela',con = engine,if_exists = 'append',chunksize=1000)

这将消除写入另一个CSV的需要,因为您已经将数据存储在pandas数据框中。完成此操作后,您可以创建游标以验证是否已将数据写入sqlite db文件中。

语句:

if_exsists = 'append'

将强制将新数据追加到表中,或者如果不存在则创建表。

chunksize = 1000

这将一次写入1000条记录(如果少于1000条,则一次写入所有记录),然后提交记录,将数据保存到表中。

本文链接:https://www.f2er.com/3105758.html

大家都在问