sqlite3操作备注(1)

目录

一、基本操作命令(Linux)

二、使用.output/.dump/.read 命令,通过脚本来 保存或创建 数据库表

三、另一种使用 .dump 命令导出导入整个数据库 的例子

四、使用 .import 导入数据库表的内容

五、附加数据库 attach/detach


 

 

一、基本操作命令(Linux)

1. sqlite3 数据库不用创建,系统命令行下直接执行"sqlite3 yangxt.db"则会进入到数据库,如果没有该数据库则自动创建;

2. sqlite3命令行下执行 .databases 可以查看数据库;.table 可以查看数据库表; .schema table_name 可以查看创建表的sql;

3. .separator STRING 改变 .output输出模式 和 .import 所使用的分隔符;.nullvalue STRING 在有NULL值的地方输出STRING;

4. .show 查看当前各种配置值; .timer ON|OFF 开启|关闭 定时器;.help 查看所有命令;

5. .backup 命令使用方法 还未作详细了解,待补充。。。。。。

二、使用.output/.dump/.read 命令,通过脚本来 保存或创建 数据库表

1. sqlite3命令行下执行 .output file_name.sql 将输出重定向到文件,文件名和后缀自定义则可;

2. 如果已有数据库,可以使用 .dump [table_name]将数据库表的创建导出到脚本;如果没有参数table_name则表示导出整个数据库;

# 使用.dump 命令将数据库yangxt.db导出(yangxt.db事先创建并插入了数据)
[root@localhost sqlite3_yxt]# sqlite3 yangxt.db 
SQLite version 3.6.20
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> .output create_yangxt_db.sql
sqlite> .dump # 导出整个数据库,目前只有一个表yangxt
sqlite> .exit
[root@localhost sqlite3_yxt]# cat create_yangxt_db.sql 
PRAGMA foreign_keys=OFF;
BEGIN TRANSACTION;
CREATE TABLE yangxt(
		ID INTEGER PRIMARY KEY,
		SensorID INTEGER,
		SiteNum INTEGER,
		Time VARCHAR(12),
		SensorParameter REAL
	);
INSERT INTO "yangxt" VALUES(1,1,1,'200605011306',16.4);
INSERT INTO "yangxt" VALUES(2,1,1,'200605011206',18.9);
COMMIT;
[root@localhost sqlite3_yxt]# 

3. 使用 .read fine_name.sql 可以执行文件里面的sql语句,通过脚本自动创建数据库;

# 使用 .read 命令执行sql脚本,创建数据库表
[root@localhost sqlite3_yxt]# sqlite3 yangxt.db 
SQLite version 3.6.20
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> .table
yangxt
sqlite> select * from yangxt;
1|1|1|200605011306|16.4
2|1|1|200605011206|18.9
sqlite> .header on     # 显示表头
sqlite> .mode colum # 列左对齐
sqlite> .timer on    # 开启定时器
sqlite> select * from yangxt;
ID          SensorID    SiteNum     Time          SensorParameter
----------  ----------  ----------  ------------  ---------------
1           1           1           200605011306  16.4           
2           1           1           200605011206  18.9           
CPU Time: user 0.000000 sys 0.000000
sqlite> drop table yangxt;
CPU Time: user 0.000000 sys 0.002000
sqlite> .table
sqlite> .read create_yangxt_db.sql 
CPU Time: user 0.000000 sys 0.000000
CPU Time: user 0.000000 sys 0.000000
CPU Time: user 0.000000 sys 0.001000
CPU Time: user 0.000000 sys 0.000000
CPU Time: user 0.000000 sys 0.000000
CPU Time: user 0.000000 sys 0.000000
sqlite> .table
yangxt
sqlite> select * from yangxt;
ID          SensorID    SiteNum     Time          SensorParameter
----------  ----------  ----------  ------------  ---------------
1           1           1           200605011306  16.4           
2           1           1           200605011206  18.9           
CPU Time: user 0.000000 sys 0.000000
sqlite> 

三、另一种使用 .dump 命令导出导入整个数据库 的例子

# 使用 .dump 导出整个数据库 
[root@localhost sqlite3_yxt]# ls
create_yangxt_db.sql  yangxt1.db  yangxt.db  yangxt_table.txt
[root@localhost sqlite3_yxt]# sqlite3 yangxt.db .dump > create_yangxt_table.sql  # 导出数据库到create_yangxt_table.sql文件
[root@localhost sqlite3_yxt]# ls
create_yangxt_db.sql     yangxt1.db  yangxt_table.txt
create_yangxt_table.sql  yangxt.db
[root@localhost sqlite3_yxt]# cat create_yangxt_table.sql 
PRAGMA foreign_keys=OFF;
BEGIN TRANSACTION;
CREATE TABLE yangxt(
		ID INTEGER PRIMARY KEY,
		SensorID INTEGER,
		SiteNum INTEGER,
		Time VARCHAR(12),
		SensorParameter REAL
	);
INSERT INTO "yangxt" VALUES(1,1,1,'200605011306',16.4);
INSERT INTO "yangxt" VALUES(2,1,1,'200605011206',18.9);
COMMIT;
[root@localhost sqlite3_yxt]# rm -f yangxt.db 
[root@localhost sqlite3_yxt]# ls
create_yangxt_db.sql  create_yangxt_table.sql  yangxt1.db  yangxt_table.txt
[root@localhost sqlite3_yxt]# sqlite3 yangxt.db < create_yangxt_table.sql  # 重新导入数据库
[root@localhost sqlite3_yxt]# ls
create_yangxt_db.sql     yangxt1.db  yangxt_table.txt
create_yangxt_table.sql  yangxt.db
[root@localhost sqlite3_yxt]# sqlite3 yangxt.db
SQLite version 3.6.20
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> .table
yangxt
sqlite> select * from yangxt;
1|1|1|200605011306|16.4
2|1|1|200605011206|18.9
sqlite> 

四、使用 .import 导入数据库表的内容

# 使用 .import 命令导入数据到数据库表
[root@localhost sqlite3_yxt]# ls
create_yangxt_db.sql  create_yangxt_table.sql  yangxt1.db  yangxt.db
[root@localhost sqlite3_yxt]# sqlite3 yangxt.db 
SQLite version 3.6.20
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> .table
yangxt
sqlite> select * from yangxt;
1|1|1|200605011306|16.4
2|1|1|200605011206|18.9
sqlite> .output yangxt_table.txt 
sqlite> select * from yangxt; # 测试,先把yangxt表的数据导出到yangxt_table.txt文件
sqlite> .output stdout
sqlite> .exit
[root@localhost sqlite3_yxt]# ls
create_yangxt_db.sql     yangxt1.db  yangxt_table.txt
create_yangxt_table.sql  yangxt.db
[root@localhost sqlite3_yxt]# cat yangxt_table.txt # 查看导出的yangxt表的数据内容
1|1|1|200605011306|16.4
2|1|1|200605011206|18.9
[root@localhost sqlite3_yxt]# sqlite3 yangxt.db 
SQLite version 3.6.20
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> .table
yangxt
sqlite> select * from yangxt;
1|1|1|200605011306|16.4
2|1|1|200605011206|18.9
sqlite> delete from yangxt; # 把yangxt表中原来的内容删除
sqlite> select * from yangxt; # 查询确认yangxt表中内容已经被删除
sqlite> .import yangxt_table.txt yangxt     # 将上面导出到yangxt_table.txt文件的yangxt表内容重新导入到表
sqlite> select * from yangxt;     # 导入表之后再次查询,数据内容和我们导入的内容一致
1|1|1|200605011306|16.4
2|1|1|200605011206|18.9
sqlite> 

五、附加数据库 attach/detach

1. 作用:同时使用多个数据库(假如是DB1和DB2)的数据(比如DB1.table1 和 DB2.table1),SQLite提供了一种将外部数据库附加到当前数据库连接的机制——Attach DB;

2. 基本命令

ATTACH DATABASE 'DatabaseName' As Alias-Name;
ATTACH DATABASE Alias-Name;

这里面需要注意几个点: 
(1)attach语句的第一个参数必须在单引号之内,且必须是相对于当前SQLite终端的完整路径文件名。 
(2)attach语句的第二个参数可以用单引号,也可以不用。 
(3)对于attach进来的数据库,是一个as后面的参数(附加数据库别名)作为ID,也就是说:如果想附加多个数据库,需要指定不同的别名,别名不可重复;同一个数据库可以多次附加,只要保证使用不同的别名即可。

3. 附加数据库的更新和同步机制

SQLite的Attach DB机制是一种非常宽松的机制,对于附加数据库,可以同步和被同步。你可以在直接连接DB2中更新数据库,数据会同步更新到附加连接,也即可以在附加连接(DB2作为附加数据库)中查看到更新内容,反之亦然。这种机制很强大和灵活,但也增加了风险性。自己创建2个数据库test1.db 和 test2.db,进行更新试验则可得出结论。

参见:SQLite实用武器库(4)附加数据库(Attach DB)

六、双方都

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是使用SQLite实现的代码示例: ```python import sqlite3 class TeacherDatabase: def __init__(self): # 连接数据库 self.conn = sqlite3.connect('teacher.db') # 获取游标 self.cursor = self.conn.cursor() # 创建表 self.cursor.execute(''' CREATE TABLE IF NOT EXISTS scetc_teacher ( teacher_id VARCHAR(32) PRIMARY KEY, teacher_name VARCHAR(16), teacher_profession VARCHAR(64), teacher_tech VARCHAR(64), teacher_post VARCHAR(32) ); ''') self.conn.commit() def add_teacher(self): # 从控制台输入教师信息 teacher_id = input('请输入工号:') teacher_name = input('请输入姓名:') teacher_profession = input('请输入从事专业:') teacher_tech = input('请输入职称:') teacher_post = input('请输入职位:') # 判断工号是否已存在 self.cursor.execute('SELECT * FROM scetc_teacher WHERE teacher_id=?', (teacher_id,)) if self.cursor.fetchone(): print('该工号已存在,请重新输入!') return # 将教师信息写入数据库 self.cursor.execute('INSERT INTO scetc_teacher VALUES (?, ?, ?, ?, ?)', (teacher_id, teacher_name, teacher_profession, teacher_tech, teacher_post)) self.conn.commit() print('教师信息添加成功!') def query_teacher(self): # 查询所有教师信息并在控制台打印显示 self.cursor.execute('SELECT * FROM scetc_teacher') teachers = self.cursor.fetchall() if not teachers: print('暂无教师信息!') else: for teacher in teachers: print('工号:%s,姓名:%s,从事专业:%s,职称:%s,职位:%s' % teacher) def __del__(self): # 关闭连接 self.cursor.close() self.conn.close() if __name__ == '__main__': db = TeacherDatabase() db.add_teacher() db.query_teacher() ``` 使用方法如下: 1. 运行代码,会自动创建数据库文件`teacher.db`和表`scetc_teacher`。 2. 输入教师信息,程序会将其写入数据库。如果工号已存在,则会提示重新输入。 3. 查询教师信息,程序会将所有教师信息打印在控制台上。如果没有教师信息,则会提示暂无教师信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值