首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >从sqlite3执行Python点命令或在命令行实用程序中注册归类

从sqlite3执行Python点命令或在命令行实用程序中注册归类
EN

Stack Overflow用户
提问于 2010-02-27 11:05:16
回答 5查看 9.9K关注 0票数 23

我的sqlite3数据库包含一个"collate“列约束。我已经将它放在表的模式中,以防止意外疏忽使用必要的排序规则。然而,这意味着当从命令行运行sqlite3时,而不是从我的Python代码运行时,模式中引用的排序规则不存在,并且我无法使用点命令。

代码语言:javascript
复制
sqlite> .import data.txt table_name
Error: no such collation sequence: my_collation

此外,从Python创建连接并添加所需的排序规则会遇到以下问题:

代码语言:javascript
复制
connWithCollation.execute(".import data.txt table_name")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
sqlite3.OperationalError: near ".": syntax error

它所显示的点函数不希望传递sqlite3点命令。

当必要的排序函数不存在时,我如何执行sqlite3点命令?或者,我如何从sqlite3执行Python点命令?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-05-06 05:12:29

您可以使用load_extension()内置的SQLite函数或SQLite命令行shell中的.load命令加载新的排序序列和函数。显然,扩展应该用C编写。

而且不能从python调用点命令,因为点命令特定于命令行shell工具。

票数 10
EN

Stack Overflow用户

发布于 2017-09-20 13:15:30

您可以使用子进程模块从Python调用点命令,这基本上调用了一个shell。如果需要使用多个点命令,可以将它们作为单独的shell参数传递--使用分号分隔它们是行不通的。

代码语言:javascript
复制
import subprocess
subprocess.call(["sqlite3", "xxx.db", 
  ".mode tabs", 
  ".import file.tsv table_name"])
票数 13
EN

Stack Overflow用户

发布于 2010-05-06 09:38:29

sqlite shell中的.import命令是一个内置命令。它是由shell程序处理的,而不是SQL引擎,所以您不能像SQL语句那样执行它。

在读取SQLite的shell.c代码时,.import似乎只是一个循环,从数据文件中读取行,拆分分隔符,并将字段作为参数值传递给准备好的INSERT语句。因此,您应该能够很容易地用Python代码模拟.import的行为。

我用Python 2.6测试了以下内容:

代码语言:javascript
复制
import sqlite3
import csv

conn = sqlite3.connect(':memory:')

conn.execute('create table mytable (col1 text, col2 text, col3 text)')

csvReader = csv.reader(open('mydata.csv'), delimiter=',', quotechar='"')

for row in csvReader:
        conn.execute('insert into mytable (col1, col2, col3) values (?, ?, ?)', row)

cur = conn.cursor()
cur.execute('select * from mytable')
print cur.fetchall()
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2346074

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档