sqlite python-将记录从txt文件读入表中

sqlite python-将记录从txt文件读入表中,python,sqlite,Python,Sqlite,我创建了一个python脚本,用于设置SQLite数据库并创建一个表,现在我尝试从.txt文件将值读入表中,如下所示 import sqlite3 conn = sqlite3.connect('mydatabase.db') c = conn.cursor() c.execute('''CREATE TABLE mytable (var1 TEXT, var2 REAL)''') c.execute('separator "," ') c.execu

我创建了一个python脚本,用于设置SQLite数据库并创建一个表,现在我尝试从.txt文件将值读入表中,如下所示

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

c.execute('''CREATE TABLE mytable
         (var1 TEXT,
         var2 REAL)''')

c.execute('separator "," ')

c.execute('import records.txt myTable ')

conn.commit()

for row in c.execute('SELECT * FROM myTable'):
    print(row)

conn.close()
records.txt看起来像

item1, 8.8
item2, 9.1
当我从命令行运行python代码时,我得到

    c.execute('separator "," ')
sqlite3.OperationalError: near "separator": syntax error
我如何在这里使用separator sql语句,对于import语句可能会遇到同样的问题

如何使此代码工作?

c.execute'separator,' 应替换为:

sql_语句='插入mytablevar1,var2值?,?' 值='text',343.4 c、 executesql_语句、值 问号是要插入的值的占位符。请注意,应在元组中传递这些值,如果要在数据库中插入单个值,则values参数应如下所示:

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

c.execute('''CREATE TABLE mytable (var1 TEXT, var2 REAL)''')

with open("records.txt", "r") as f:
    rows = f.readlines()
    for row in rows:
        fields = row.split(',')
        c.execute(f'INSERT INTO mytable (var1, var2)'\
                  f"VALUES ('{fields[0]}','{fields[1]}')")

conn.commit()

for row in c.execute('SELECT * FROM myTable'):
    print(row)

conn.close()
值=文本, 一个有效的解决办法:

导入sqlite3 创建数据库并初始化游标 conn=sqlite3.connect'mydatabase.db' c=连接光标 如果不存在,则创建表 c、 执行'CREATE TABLE IF NOT EXISTS mytablevar1 TEXT,var2 REAL' sql_insert='插入mytablevar1,var2值?,?' 打开'results.txt','r'作为fr: 对于fr.readlines中的行: 解析results.txt,创建逗号分隔值列表 行=行。替换“\n”、.split”、' t、 f=直线 c、 executesql_insert、t、floatf 康涅狄格州 sql_select='select*FROM mytable' 对于c.executesql_中的行,请选择: 打印行 康涅狄格州
我认为这在Python模块sqlite3中是不可能的。仅带前导点命令的.separator for me以及.import是CLI前端sqlite3的功能

如果要使用这些命令,可以使用子流程调用以下命令:

import subprocess

p = subprocess.Popen(["sqlite3", "mydatabase.db"], stdout=subprocess.PIPE, stdin=subprocess.PIPE)

p.communicate(b"""
CREATE TABLE mytable
         (var1 TEXT,
         var2 REAL);
.separator ","
.import records.txt myTable
""")

上述解决方案将很好地发挥作用。为了让它更可读、更容易调试,您也可以这样做:

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

c.execute('''CREATE TABLE mytable (var1 TEXT, var2 REAL)''')

with open("records.txt", "r") as f:
    rows = f.readlines()
    for row in rows:
        fields = row.split(',')
        c.execute(f'INSERT INTO mytable (var1, var2)'\
                  f"VALUES ('{fields[0]}','{fields[1]}')")

conn.commit()

for row in c.execute('SELECT * FROM myTable'):
    print(row)

conn.close()
这样,您就可以使用Python打开文本文件并读取行。对于每一行,您需要将记录分开,并立即将它们放入INSERT语句中。又快又简单


祝你好运

为什么要在使用Python脚本时使用sql命令导入文件?为什么不使用Python读取文件并让它触发一系列INSERT语句呢?因为如果我有var1,var2。。。var1000那么我的insert语句有一千个吗?标记您始终可以生成该SQL语句。您使用的是非参数化版本的execute。这是不可取的,因为它可能导致SQL注入错误。此外,自己读取CSV文件也很麻烦,请使用CSV模块。您可以直接迭代文件,而不是将所有行读入内存然后进行迭代。第一个f字符串是不必要的,不展开任何变量。最后但并非最不重要的一个操作是var1,var2=row.split,而不是访问字段[i]。