2016-05-24 5 views
0

Es gibt einen Beitrag, der mir sagt, wie man Daten aus einer CSV-Datei in eine SQLite-Datenbank schreiben (link). Gibt es eine Möglichkeit, einfach die gesamte Datei in eine Datenbanktabelle zu kopieren, anstatt die Daten zu laden und dann durch die Zeilen zu iterieren, die sie an die Tabelle anhängen, wie in der Verknüpfung vorgeschlagen.Kopie CSV-Datei in SQLite-Datenbank-Tabelle mit Python

dies in SQLite zu tun, sagt sie here einfach

mit Datenbanken und sqlite3
sqlite> create table test (id integer, datatype_id integer, level integer, meaning text); 
sqlite> .separator "," 
sqlite> .import no_yes.csv test 

Ich bin neu in Arbeit zu geben, aber ich dachte, so etwas wie dies zu tun

import sqlite3 

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

def create_table(name): 
    c.execute("CREATE TABLE IF NOT EXISTS {} (time REAL, event INTEGER, id INTEGER, size INTERGER, direction INTEGER)".format(name)) 

def copy_data(file2copy,table_name): 
    c.executescript("""  
    .separator ","  
    .import {} {}""".format(file2copy,table_name)) 
    conn.commit() 


try: 
    create_table('abc') 
    copy_data(r'Y:\MYPATH\somedata.csv','abc') 

except Exception as e: 
    print e 

c.close() 
conn.close() 

arbeiten konnte aber offenbar es tut es nicht. Ich erhalte die Fehler

near ".": syntax error 

EDIT: Dank der folgenden Vorschlag der Subprozess Modul zu verwenden, ich mit der follwing Lösung kam.

Wichtig, sollten Sie '/' anstelle von '\' in Ihren Verzeichnisnamen verwenden. Außerdem müssen Sie auf Leerzeichen in Ihren Verzeichnisnamen achten.

Antwort

0

Die Befehle, die Sie in copy_data verwenden, die mit . beginnen, sind nicht Teil von sqlite3, sondern die interaktive Shell, die mit ihr ausgeliefert wird. Sie können sie nicht über das Modul sqlite3 verwenden.

Sie müssen entweder den Einfügeschritt manuell schreiben oder das Modul subprocess verwenden, um das Shell-Programm auszuführen.