2016-05-24 8 views
0

csv-fileのデータをsqliteデータベース(link)に書き込む方法を教えてくれる投稿があります。 データをロードする代わりにファイル全体をデータベーステーブルに単純にコピーし、そのリンクに示唆されているようにテーブルに追加する行を反復処理する方法がありますか? sqliteの中でこれを行うにはpythonを使用してcsvファイルをsqliteデータベーステーブルにコピー

それは単に私がデータベースとsqlite3のでの作業に新しいですが、私はこのような何かをやっては

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() 

しかし、どうやら仕事と考えていた

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

を入力しhereを語りますそれはしません。 subprocessモジュールを使用するには、以下の提案におかげで、私はfollwing解決策を思い付いた:私はEDIT

near ".": syntax error 

エラーを取得します。

import subprocess 

sqlshell = r'c:\sqlite-tools\sqlite3' # sqlite3.exe is a shell that can be obtained from the sqlite website 
process = subprocess.Popen([sqlshell], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE) 

cmd = """.open {db} 
.seperator "," 
.import {csv} {tb}""".format(db='C:/Path/to/database.db', csv='C:/Path/to/file.csv', tb='table_name') 

stdout, stderr = process.communicate(input=cmd) 

if len(stderr): 
    print 'something went wrong' 

重要なことに、ディレクトリ名に '\'の代わりに '/'を使用する必要があります。また、ディレクトリ名には空白を注意する必要があります。

答えて

0

.で始まるcopy_dataで使用しているコマンドは、sqlite3の部分ではなく、付属の対話型シェルです。 sqlite3モジュールでは使用できません。

手動で挿入ステップを記述するか、subprocessモジュールを使用してシェルプログラムを実行する必要があります。

関連する問題