sqlite python-将记录从txt文件读入表中
我创建了一个python脚本,用于设置SQLite数据库并创建一个表,现在我尝试从.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
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]。