使用python将csv文件复制到sqlite数据库表中

时间:2016-05-24 10:30:19

标签: python sqlite

有一篇文章告诉我如何将csv文件中的数据写入sqlite数据库(link)。 有没有办法简单地将整个文件复制到数据库表,而不是加载数据,然后按照链接中的建议迭代将它们附加到表中的行。

要在sqlite中执行此操作,只需键入

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

我是使用数据库和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()

但显然它没有。我收到了错误

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'

重要的是,您应该在目录名中使用'/'而不是'\'。此外,您必须小心目录名称中的空格。

1 个答案:

答案 0 :(得分:0)

您在copy_data中使用的以.开头的命令不属于sqlite3,而是它附带的交互式shell。您无法通过sqlite3模块使用它们。

您需要手动编写插入步骤或使用subprocess模块运行shell程序。