irpas技术客

python 、linux下操作sqlite3数据库_lynn_321_linux python sqlite3

irpas 8334

查看版本 sqlite3 -version

打开或创建数据库 sqlite3 test.db

查看数据库信息 sqlite>.database 查看所有表 sqlite>.table 查看所有表的创建语句: sqlite>.schema 查看某个表的创建语句: sqlite>.schema table_name 最重要的一个命令,执行sql语句(必须以分号结尾,不加分号就敲回车则是分行) sqlite>select * from table_name; 退出SQLite sqlite>.qui

SQLite清空表并将自增列归零

当 SQLite数据库中包含自增列时,会自动建立一个名为 sqlite_sequence 的表。这个表包含两个列:name和seq。name记录自增列所在的表,seq记录当前序号(下一条记录的编号就是当前序号加1)。如果想把某个自增列 的序号归零,只需要修改 sqlite_sequence表就可以了。

UPDATE sqlite_sequence SET seq = 0 WHERE name = 'TableName';

也可以直接把该记录删掉:

DELETE FROM sqlite_sequence WHERE name = 'TableName';

要想将所有表的自增列都归零,直接清空sqlite_sequence表就可以了:

DELETE FROM sqlite_sequence;

使用drop语句删除一个表,然后重新创建表,表的主键也会重新生成。

drop table tablename

使用sqlite语句导出数据生成csv文件 #多表联查 select A.id text_id, A.created_at, A.updated_at, A.text text, C.text label, D.username from api_document A inner join api_documentannotation B on A.id = B.document_id inner join api_label C on C.id = B.label_id inner join auth_user D on B.user_id = D.id order by A.id;

加入拆分字段的代码语句(sqlite不能用!!!!):

select A.id, A.created_at,A.updated_at, substring_index(A.text,'+',1) url_id, substring_index(substring_index(A.text,'+',2),'+',-1) url, substring_index(A.text,'+',-1) html_content, C.text, D.username from api_document A inner join api_documentannotation B on A.id = B.document_id inner join api_label C on C.id = B.label_id inner join auth_user D on B.user_id = D.id order by A.id;

要将数据从SQLite数据库导出到CSV文件,请使用以下步骤:

1.使用.headeron命令打开结果集的标题。

2.将输出模式设置为CSV。

3.选择要输出的表。

4.将输出发送到CSV文件。

代码如下

// 打开sqlte的数据库文件 >sqlite3 xxx.db ? sqlite> .headers on sqlite> .mode csv sqlite> .output data.csv ? //可自定义路径 sqlite> SELECT * FROM table_name; sqlite> .output stdout // 输出重定向

如果不打.header on这行代码,则输出的文件没有标题栏。

或者直接使用:

>sqlite3 -header -csv doccano.db "select A.id, A.text, A.created_at, A.updated_at, C.text, D.username from api_document A inner join api_documentannotation B on A.id = B.document_id inner join api_label C on C.id = B.label_id inner join auth_user D on B.user_id = D.id order by A.id;" > /home/clm/data_1.csv >sqlite3 -header -csv xxx.db "select * from table_name;" > data.csv

Python 操作sqlite3

SQLite 常用函数

SQLite 提供了一些内置函数,也就是我们可以直接使用的函数,下面来看一下。

函数描述COUNT计算一个数据库表中的行数MAX某列的最大值MIN某列的最小值AVG某列的平均值SUM某列的和RANDOM返回一个介于 -9223372036854775808 和 +9223372036854775807 之间的随机整数ABS返回数值参数的绝对值UPPER把字符串转换为大写字母LOWER把字符串转换为小写字母LENGTH返回字符串的长度sqlite_version返回 SQLite 库的版本

使用示例如下所示:

SELECT COUNT(*) FROM table; SELECT MAX/MIN/AVG/SUM/ABS/UPPER/LOWER/LENGTH(col) FROM table; SELECT random() AS Random; SELECT sqlite_version() AS 'SQLite Version';

基本使用

1 连接数据库(进入数据库所在路径下)

# 导入模块 import sqlite3 # 连接数据库 conn = sqlite3.connect('doccano.db')

如果数据库不存在,则会自动被创建。

2 游标

连接数据库后,我们需要使用游标进行相应 SQL 操作,游标创建如下所示:

# 创建游标 cs = conn.cursor()

3 创建表

我们在 test.db 库中新建一张表 student,如下所示:

# 创建表 cs.execute('''CREATE TABLE student ? ? ? (id varchar(20) PRIMARY KEY, ? ? ? name varchar(20));''') # 关闭 Cursor cs.close() # 提交当前事务 conn.commit() # 关闭连接 conn.close()

4 新增

我们向 student 表中插入两条数据,如下所示:

cs.execute("INSERT INTO student (id, name) VALUES ('1', 'Jhon')") cs.execute("INSERT INTO student (id, name) VALUES ('2', 'Alan')") cs.execute("INSERT INTO student (id, name) VALUES ('3', 'Bob')") cs.close() conn.commit() conn.close()

5 查询

前面我们是通过 SQLiteStudio 查看数据的,现在我们通过 SQL 查看一下,如下所示:

# 导入模块 import sqlite3 # 连接数据库 conn = sqlite3.connect('doccano.db') # 创建游标 cs = conn.cursor() # 查询数据 cs.execute("SELECT id, text FROM api_label").fetchall() # 获取查询结果集中的下一行 print('fetchone-->', cs.fetchone()) # 获取查询结果集中的下一行组 print('fetchmany-->', cs.fetchmany()) # 获取查询结果集中所有(剩余)的行 print('fetchall-->', cs.fetchall()) cs.close() conn.close()

输出结果:

fetchone--> ('1', 'Jhon') fetchmany--> [('2', 'Alan')] fetchall--> [('3', 'Bob')]

6 更新

我们修改 id 为 1 这条数据的 name 值,如下所示:

# 导入模块 import sqlite3 # 连接数据库 conn = sqlite3.connect('doccano.db') # 创建游标 cs = conn.cursor() # 修改数据 cs.execute("SELECT id, text FROM api_label WHERE id = '12'") print('修改前-->', cs.fetchall()) cs.execute("UPDATE api_label set text = '涉贷' WHERE id = '12'") cs.execute("SELECT id, text FROM api_label WHERE id = '12'") print('修改后-->', cs.fetchall()) conn.commit() cs.close() conn.close()

输出结果:

修改前--> [('1', 'Jhon')] 修改后--> [('1', 'Nicolas')]

7 删除

我们删除 id 为 1 这条数据,如下所示:

# 导入模块 import sqlite3 # 连接数据库 conn = sqlite3.connect('doccano.db') # 创建游标 cs = conn.cursor() # 删除 cs.execute("SELECT id, text FROM api_label") print('删除前-->', cs.fetchall()) cs.execute("DELETE FROM api_label WHERE id = '12'") cs.execute("SELECT id, text FROM api_label") print('删除后-->', cs.fetchall()) conn.commit() cs.close() conn.close()

输出结果:

删除前--> [('2', 'Alan'), ('1', 'Jhon')] 删除后--> [('2', 'Alan')]


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #Linux #Python #sqlite3 #查看版本 #version打开或创建数据库 #testdb查看数据库信息