Import von CSV in Datenbank mit sqlalchemy

Ich benutze dieses Beispiel, um eine CSV-Datei in eine sqlite-Datenbank hochzuladen:

Das ist mein Code:

from numpy import genfromtxt from time import time from datetime import datetime from sqlalchemy import Column, Integer, Float, Date, String, VARCHAR from sqlalchemy.ext.declarative import declarative_base from sqlalchemy import create_engine from sqlalchemy.orm import sessionmaker def Load_Data(file_name): data = genfromtxt(file_name, delimiter=',')# skiprows=1, converters={0: lambda s: str(s)}) return data.tolist() Base = declarative_base() class cdb1(Base): #Tell SQLAlchemy what the table name is and if there's any table-specific arguments it should know about __tablename__ = 'cdb1' __table_args__ = {'sqlite_autoincrement': True} #tell SQLAlchemy the name of column and its attributes: id = Column(Integer, primary_key=True, nullable=False) name = Column(VARCHAR(40)) shack = Column(VARCHAR) db = Column(Integer) payments = Column(Integer) status = Column(VARCHAR) if __name__ == "__main__": t = time() print 'creating database' #Create the database engine = create_engine('sqlite:///cdb.db') Base.metadata.create_all(engine) #Create the session session = sessionmaker() session.configure(bind=engine) s = session() try: file_name = 'client_db.csv' data = Load_Data(file_name) for i in data: record = cdb1(**{ 'name' : i[0], 'shack' : i[1], 'db' : i[2], 'payments' : i[3], 'status' : i[4] }) s.add(record) #Add all the records s.commit() #Attempt to commit all the records except: s.rollback() #Rollback the changes on error print 'error in reading' finally: s.close() #Close the connection print "Time elapsed: " + str(time() - t) + " s." #0.091s 

Und das sind die ersten paar Zeilen der CSV-Datei:

 Name,Shack,DB,Payments,Status Loyiso Dwala,I156,13542,37,LightsOnly ON Attwell Fayo,I157,13077,32,LightsON David Mbhele,G25,13155,33,LightsON 

Die DB wird ok erstellt, aber nur einige der Daten werden in die Attribute eingefangen: die 'payments' und 'db' Spalte sind korrekt gefüllt, aber alles andere kommt als NULL heraus.

AKTUALISIERTES CORRECT CODE (mit Pandas Dataframe):

 from numpy import genfromtxt from time import time from datetime import datetime from sqlalchemy import Column, Integer, Float, Date, String, VARCHAR from sqlalchemy.ext.declarative import declarative_base from sqlalchemy import create_engine from sqlalchemy.orm import sessionmaker import csv import pandas as pd #def Load_Data(file_name): #data = csv.reader(file_name, delimiter=',')# skiprows=1, converters={0: lambda s: str(s)}) #return data.tolist() Base = declarative_base() class cdb1(Base): #Tell SQLAlchemy what the table name is and if there's any table-specific arguments it should know about __tablename__ = 'cdb1' __table_args__ = {'sqlite_autoincrement': True} #tell SQLAlchemy the name of column and its attributes: id = Column(Integer, primary_key=True, nullable=False) Name = Column(VARCHAR(40)) Shack = Column(VARCHAR) DB = Column(Integer) Payments = Column(Integer) Status = Column(VARCHAR) engine = create_engine('sqlite:///cdb.db') Base.metadata.create_all(engine) file_name = 'client_db.csv' df = pd.read_csv(file_name) df.to_sql(con=engine, index_label='id', name=cdb1.__tablename__, if_exists='replace') 

One Solution collect form web for “Import von CSV in Datenbank mit sqlalchemy”

Kennen Sie Pandas Dataframe?

Wirklich einfach zu bedienen (und debuggen)

Pandas.read_csv (Dateiname)

 In [5]: pandas.read_csv('/tmp/csvt.csv') Out[5]: Name Shack DB Payments Status 0 Loyiso Dwala I156 13542 37 LightsOnly ON 1 Attwell Fayo I157 13077 32 LightsON 2 David Mbhele G25 13155 33 LightsON 

Zum Einfügen der DataFrames-Daten in eine Tabelle können Sie einfach pandas.DataFrame.to_sql verwenden

Also dein Hauptcode wird am Ende so etwas aussehen:

 engine = create_engine('sqlite:///cdb.db') Base.metadata.create_all(engine) file_name = 'client_db.csv' df = pandas.read_csv(file_name) df.to_sql(con=engine, index_label='id', name=cdb1.__tablename__, if_exists='replace') 

Sie sollten weiter lesen in der Dokumentation Link, den ich hinzugefügt habe, und legen Sie die Funktion Parameter als passend zu Ihrem Zweck (speziell zu betrachten – if_exists, index, index_label, dtype)

  • Exportieren von Daten von sqlite zu numpy array
  • Sqlite python sqlite3.OperationalError: Datenbank ist gesperrt
  • SQLite-Parameter-Substitutionsproblem
  • SQL: Kann WHERE-Anweisung bestimmte Gruppen für GROUP BY-Anweisung herausfiltern
  • Fehler - "SQLite DateTime-Typ akzeptiert nur Python" "Datums- und Datumsobjekte als Eingabe".
  • Python sqlite3 String Formatierung
  • Python / SQLite3: kann nicht begehen - keine Transaktion ist aktiv
  • Spalte Details in sqlite3
  • Profil Millionen von Textdateien im Parallel mit einem Sqlite Counter?
  • Sqlite3.OperationalError: unerkanntes Token: "01T00" Python datestamp
  • Wie machst du eine datetimebasierte Abfrage mit SQLite in Python?
  • Python ist die beste Programmiersprache der Welt.