python-数据库

数据库

SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,

原子性(Atomicity)、 一致性(Consistency)、

隔离性(Isolation)、 持久性(Durability)

它的设计目标是嵌入式的,而且已经在很多嵌入式产品中使用了它, 它占用资源非常的低,它能够支持Windows/Linux/Unix等等主流的操作系 统, 同时能够跟很多程序语言相结合。

SQL 结构化查询语言 ==》数据库脚本语言

sqlite3 下载地址:

https://www.sqlite.org/download.html

win选择:

sqlite-dll-win64-x64-3320300.zip

sqlite-tools-win32-x86-3320300.zip

Mac选择:

sqlite-tools-osx-x86-3320300.zip

安装过程:

1、首先将下载的两个压缩包解压在同一个目录下,例如 D:\SQLite;

2、将该路径添加到系统的Path环境变量里;

3、在cmd中输入sqlite3 --version,若显示版本号,则安装成功;

4、退出系统用 .quit

存储类型:

NULL NULL值(不是空值)

INTEGER 带符号的整数

REAL 浮点值(8字节)

TEXT 文本字符串(UTF-8,UTF-16BE,UTF-16LE)

BLOB BLOB数据类型

(Sqlite 没有单独的Boolean类型,在数据库中存储为整数0(false), 1(true))

(Sqlite 没有单独的Date类,存储时会变成TEXT,INTEGER,REAL类型)

DOS命令:

D:\ dir 查看目录下的文件信息

D:\ cls 清理屏幕显示

D:\ cd C:\Users\Administrator\Desktop\pythonCode\07 进入到目标代 码目录

D:\sqlite3 回车 命令行会自动进入该目录下

sqlite> 表示正常进入到dbms系统中

退出系统用 .quit

先有数据库 ==》创建数据表 ==》增加数据 ==》维护(增加,删除, 修改,查询)

基本操作:

1、创建数据库文件并登录;

Sqlite3 test.db ===》.db 后缀的是数据库文件,其中允许创建多个表 格。

手工创建 xxx.db 也可以,只要保证文件后缀是 .db 即可。

2、在数据库中新建表; SQL 语句

create table user (id int ,name text,pass text);

create table test (id integer primary key autoincrement not null,name text);

id integer primary key autoincrement not null

整形 主键 自动增长 非空

create table test(id int , name text, pass text);

注意:表名 可以自由定义,表的字段名称也可以自由定义 但是类型要正 确。

如果出现 syntax error 表示SQL 语句有语法错误。

.tables 查看创建的表是否成功

以下操作都是基于SQL 语句执行,与平台无关都可以正常执行。

3、向数据库中插入一条记录:

insert into test (name) values (''OpenLab"); #指定值插入

inser into 是插入关键字

test 是表名称

name是表中的列名称

values是关键字

"OpenLab"是插入的列对应的数据值。

insert into test(id,name,pass) values (1, 'zhang', '123345'); #全列匹 配插入

insert into test values (2, 'asd"','2345'); #全列默认匹配插入,必须值 一一匹配

insert into test (id,name) values (3, 'afasdf'); #指定值插入

4、查询所有表中数据:

select * from test; #查询所有表中记录并打印输出

select 是查询关键字

* 是通配符,表示所有列都输出

from 是关键字

test 是表名字

select * from test where id = 1; # where 辅助查询关键字,限定范 围

select * from test where pass = 123 and name = "张三";

select * from test where id = 1 or id = 2;

select * from test where id > 1;

select id,name from test; #指定列的时候可以间隔列名

select id,name from test where id = 1 ; #列名和限定词一起组合查询

思考题: 首先创建一个数据库并设计相关的表,然后

Sqlite3 test.db

create table test(id int , name text, pass text);

insert into test(id,name,pass) values (1, "zhang" , "123345");

create table stu(id int ,name text,score real);

insert into stu(id,name,score) values (1, "wangwu" ,99.9);

1、编写一条sql语句可以在数据库表中找到指定用户的密码信息。

select pass from test where name = "xxx";

2、编写一条sql语句可以在数据库表中查询成绩是60分上的学生学号 信息。

select id from stu where score >= 60;

5、修改指定表中数据

update test set name = 'caoqb' ; #会修改表中所有记录,慎用

update 是修改关键字

test 是修改的表名字

set 是设置关键字

name 是列名字

= "xxx" 是修改后的值

update test set name = "xxx" where id = 5;

update test set name = "xxx" , pass = "yyy" where id = 3;

update test set name = "xxx" where id >1 and pass = 2345;

6、删除表中指定数据:

delete from test where id = 1;

delete from 是删除关键字

test 是要删除信息的表名字

where 限定词

id=1 限定条件

delete from test where id >1 and pass = 2345;

delete from test where id =1 or id = 2;

delete from test ; ///删除表test中所有数据,直接删除无法恢复。慎用

7、退出数据库

以下不属于sql语句,属于数据库sqltie3自己的命令

.exit .q

7.1 .tables //显示当前数据库的表格

7.2 .schema tablename; //显示表格结构

7.3 .help #显示DBMS中所有相关的内部指令

练习题:

使用以上常规操作命令在各自机器上搭建操作环境 完成基本的增加 删除 修改 查询 功能sql语句同时 考虑如何将以上操作能简化处理 ?

==》可视化 ==》sqlite administor

http://sqliteadmin.orbmu2k.de/

其他的数据库操作:

1、 删除表

drop table test1;

2、 排序 默认是 ASC:升序,DESC:降序 不区分大小写

select * from test where price < 103 order by price desc limit 5 ;

order by xxx 按照xxx所在的列排序

limit num 只需要查询指定的前num个数据

3、去重

select distinct name from test;

4、分组 GROUP BY 子句必须放在 WHERE 子句中的条件之后,必须放在ORDER BY 子句之前。

select * from test where price > 102

group by name having count(name) < 2

order by name limit 4;

5、模糊查询

WHERE SALARY LIKE '200%' 查找以 200 开头的任意值

WHERE SALARY LIKE '%200%' 查找任意位置包含 200 的任意值

WHERE SALARY LIKE '_00%' 查找第二位和第三位为 00 的任意值

WHERE SALARY LIKE '2_%_%' 查找以 2 开头,且长度至少为 3 个字 符的任意值

WHERE SALARY LIKE '%2' 查找以 2 结尾的任意值

WHERE SALARY LIKE '_2%3' 查找第二位为 2,且以 3 结尾的任意 值

WHERE SALARY LIKE '2___3' 查找长度为 5 位数,且以 2 开头以 3结尾的任意值

_ 是一个占位符, %是任意长度占位 。

6、where 子句:

and : 在where中可以连接多个条件

sqlite> select * from test where age > 13 and price >= 105;

or : 或

sqlite> select * from test where age > 13 or price < 200;

not != : 否定,一般和not in / not between 等合用

select * from test where name != "aaa"

between : 在两个值之间进行搜索

sqlite> select * from test where age between 12 and 17;

not in : 和in相反

sqlite> select * from test where age not in (12,15);

in : 返回值等于匹配值的数据

sqlite> select * from test where age in (12,15);

like : 相似匹配,后面字符不检查用 % ,大小写不敏感

sqlite> select * from test where name glob 'y*';

sqlite> select * from test where name

like 'Y%'; glob : 相似匹配,后面字符不检查用 % ,大小写不敏感

sqlite> select * from test where name glob 'y*';

is null : 用于把某个值和NULL进行比对

sqlite> select * from test where name is null;

is : 类似于 =

is not : 类似于 !=

7、导入导出

导出命令:

sqlite3 data.db

>.output dd.sql 导出的数据库脚本名称为 dd.sql

>.dump 导出所有数据

>.q 退出数据库

另一种:

sqltie3 xxx.db .dump

> yyy.sql 在数据库尚未登录时候操作

> 符号在这里表示输出到某个 文件 删除原有的数据库

导入命令:

sqlite3 新数据库.db

>.read dd.sql

>.tables 查看导入效果

另一种:

sqlite3 xxx.db < xxx.sql

< 符号在这里表示从某个脚本导入文件内容

练习:

1、将创建数据库表的sql语句和 删除数据表内容的sql语句写成sql脚本并在数据库中执行,查看效果。

2、编写代码完成一个脚本文件的读写,并通过执行该脚本能向指定的数据库中依次添加100条不同记录的消息。

python 与 sqlite3 的接口:

1、首先需要导入模块:

import sqlite3

2、连接数据库(如果数据库不存在就会创建新的数据库)

con = sqlite3.connect("test.db")

3、创建游标

cur = con.cursor()

4、常规的增加 删除 修改 查询 等SQL操作

sql = "CREATE TABLE IF NOT EXISTS test(id INTEGER PRIMARY KEY,name TEXT,age INTEGER)" #组织SQL命令串

#str = "insert into user values (7, 'wo' , '8888');"

#str = "delete from user where id = 7;"

#str = "update user set pass = '123456' where id = 6;"

cur.execute(sql) #执行SQL命令串

查询:

cur.execute('SELECT * FROM user')

#print(cur.fetchone()) #取游标第一行数据形成元组

res = cur.fetchmany(3) #取多行指定数据形成列表

print(res) #结果是列表中存储的三行元组信息

res = cur.fetchall() #取表中所有数据记录

for line in res: #遍历所有的查询记录

print(line) #以元组形式输出所有select的结果数据

5、事务的提交和回滚 con.commit() #提交 正式生效到数据库文件

con.rollback() #回滚 撤销刚才的内存操作

6、断开会话连接,释放资源 cur.close() # 关闭游标

con.close() # 断开数据库连接

练习题:

根据以上流程编写数据库操作模块,可以将用户输入的信息,写入 到数据库表中。增加,修改,删除都是用户输入的数据而不是固定 值。

print("请输入要插入数据库的id,name,pass的数据")

id= input()

name=input()

pasd=input()

#1 字符串的拼装

str = "insert into user values ("+str(id)+" , '"+name+"' , '"+pasd+"');"

#2 用元组占位拼装

cur.execute("insert into user values (%d, '%s' , '%s');"% (id,name,pasd))

#3 用问号占位拼装

cur.execute("insert into user values (?,?,?);" ,(id,name,pasd))

注意:关于数据库句柄和游标还有如下属性说明

connect方法返回con对象,即是数据库链接对象,它提供了以下方法:

.cursor() 方法来创建一个游标对象

.commit() 方法来处理事务提交

.rollback() 方法来处理事务回滚

.close() 方法来关闭一个数据库连接

对数据库的查询需要使用到游标对象,首先通过cursor()创建一个游标对 象:

游标对象有以下方法支持数据库操作:

.execute() 用来执行sql语句

.executemany() 用来执行多条sql语句

.close() 用来关闭游标

.fetchone() 用来从结果中取一条记录,并将游标指向下一条记录

.fetchmany() 用来从结果中取多条记录。

.fetchall() 用来从结果中取出所以记录

.scroll() 用于游标滚动

相关推荐
小白~小黑几秒前
软件测试基础二十(接口测试 Postman)
python·自动化·postman
codists几秒前
《Django 5 By Example》阅读笔记:p76-p104
python·django·编程人
欧阳枫落9 分钟前
python 2小时学会八股文-数据结构
开发语言·数据结构·python
天天要nx13 分钟前
D64【python 接口自动化学习】- python基础之数据库
数据库·python
feifeikon1 小时前
Python Day5 进阶语法(列表表达式/三元/断言/with-as/异常捕获/字符串方法/lambda函数
开发语言·python
杰仔正在努力1 小时前
python成长技能之枚举类
开发语言·python
Eiceblue2 小时前
通过Python 调整Excel行高、列宽
开发语言·vscode·python·pycharm·excel
Jam-Young2 小时前
Python中的面向对象编程,类,对象,封装,继承,多态
开发语言·python
Light602 小时前
低代码牵手 AI 接口:开启智能化开发新征程
人工智能·python·深度学习·低代码·链表·线性回归
墨绿色的摆渡人2 小时前
用 Python 从零开始创建神经网络(六):优化(Optimization)介绍
人工智能·python·深度学习·神经网络