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