数据库sqlite3
1、环境配置
- sqlite3数据库属于python自带的数据库,属于小型数据库,语句简洁、可视化、编辑简单、无代码改变表内结构。
- import sqlite3即可。
打开方式一:
方式二:
- 若遇到下载驱动问题,可参考之前的文章:
在pychrm中配置sqlite3环境时下载驱动失败怎么办? - 乐之之 - 博客园 (cnblogs.com)
2、创建数据库及创建表
select * from sqlite_master
import sqlite3
(1)打开或创建数据库
conn = sqlite3.connect('sqlite.db')
(2)获取游标
myCursor = conn.cursor()
(3)执行DDL(Data Definition Language)语句创建数据表
sql1 = '''create table user_tb( _id integer primary key autoincrement, name text, pass text, gender text)''' myCursor.execute(sql1)
sql2 = '''create table order_tb( _id integer primary key autoincrement, item_name text, item_price real, item_number real, user_id inteter, foreign key(user_id) references user_tb)''' myCursor.execute(sql2)
(4)关闭游标
myCursor.close()
(5)关闭连接
conn.close()
3、插入数据
- 变量名 = """insert into 表名 values (null,'数据1','数据2','数据3')"""
(1)单行插入
sql = """insert into user_tb values (null,'九歌','五期','男')"""
import sqlite3
# (1)打开或创建数据库
conn = sqlite3.connect('sqlite.db')
# (2)获取游标
mycursor = conn.cursor()
# (3)执行sql语句的insert语句
sql = """insert into user_tb values (null,'九歌','五期','男')"""
mycursor.execute(sql)
# 执行命令
conn.commit()
# (4)关闭游标
mycursor.close()
# (5)关闭库链接
conn.close()
(2)多行插入数据
sql = insert into 表名 values
executmany(sql,data)
# 导入访问SQLited的模块
import sqlite3
# (1)打开或创建数据库
# 也可以使用特殊名称:memory:,代表创建内存中的数据库
conn = sqlite3.connect('sqlite.db')
# (2)获取游标
myCursor = conn.cursor()
# (3)调用executemany()方法执行sql语句,一次insert多条记录
# ①先定义列表,放入要插入的数据
list_student = [('张三','一班','男'),
('王五','一班','男'),
('李四','一班','男'),
('赵六','一班','男')]
# ②再定义sql语句
sql_entry = 'insert into user_tb values (null,?,?,?)'
# ③运行多记录导入的执行方法executemany
myCursor.executemany(sql_entry,list_student)
# 执行命令
conn.commit()
# (4)关闭游标
myCursor.close()
# (5)关闭库连接
conn.close()
4、更新数据库信息。
- update 数据表 set 字段名 = 值 where 条件表达式
import sqlite3
# (1)打开或创建数据库
conn = sqlite3.connect('sqlite.db')
# (2)获取游标
mycursor = conn.cursor()
# (3)执行sql语句的insert语句
mycursor.executemany('update user_tb set name=? where _id=?',
(
('张三',1),
('李四',2)
))
# 通过rowcount获取被修改的记录条数
print('修改的记录条数:',mycursor.rowcount)
# 执行命令
conn.commit()
# (4)关闭游标
mycursor.close()
# (5)关闭库链接
conn.close()
5、查询数据表
(1)打开数据查询控制台
方式一:
- 输入select * from user_tb;
方式二:
select * from user_tb where 字段名 = 值
select * from user_tb where gender = '男'
- 以上语句翻译:从user_tb表中将所有关于gender为’男‘的数据查找出来。
方式三:
- order by 字段名[desc]。
(2)方法查询
- 除了用上面的方法,在PyCharm中,需要编写sql语句来查询数据表的记录。 在此有三个方法:fetchone(),fetchmany(),fetchall()。其中fetch的英文意思就是“抓取”,那么下面就好理解了。
- fetchone()——查找一条记录
- fetchmany()——查找多条记录(如fetchmany(3),就是查询3条记录)
- fetchall()——查找所有记录
# 导入访问SQLited的模块
import sqlite3
# (1)打开或创建数据库
# 也可以使用特殊名称:memory:,代表创建内存中的数据库
conn = sqlite3.connect('sqlite.db')
# (2)获取游标
myCursor = conn.cursor()
# (3)调用执行sql语句,此处加上where条件语句(就是符合where后面语句块的才被查询输出)
# myCursor.execute('select * from user_tb where _id > ?', (2, ))
myCursor.execute('select * from user_tb where _id > ?', (2,))
# ①通过使用游标cursor的rowcount属性,返回记录条数
# print('查询返回的记录数:', myCursor.rowcount)
# ②再通过游标的description属性,获取列信息
for col in (myCursor.description):
print(col[0], end='\t')
print('\n'+'-'*26)
# ③再来一轮查询,用到了游标里面的fetchone()方法
while True:
# 获取一条记录,放到一个元组
row = myCursor.fetchone()
# 如果获取不到(row为None),则退出循环
if not row:
break
print(row)
# 查询就用不到conn.commit()了,因为无需提交生笑吗
# (4)关闭游标
myCursor.close()
# (5)关闭库连接
conn.close()
6、删除数据
- delete from 数据表;所有的记录全部删除。
- delete from 数据表 where 条件表达式;
7、存储数据的类型
- 创建表的存储类型:
create table 表名(xx XX)
# 字符串 TEXT VARCHAR(255)
# 整数 NUMBER INT INTEAGR
# 时间类型 DATE DATETIME
# 浮点型 FLOAT
8、学员管理系统
(1)链接数据库。
- 定义建表函数。
- 找到对应的表,查询所有的内容,进行遍历添加到新的列表内。
- 若不存在表则返回False,在程序入口创建表。存在则返回True。
def check(db_name, table_name):
# db_name 为库名
# table_name 为表用
conn = sqlite3.connect(db_name)
cu = conn.cursor()
sql = """select tbl_name from sqlite_master where type='table'"""
cu.execute(sql)
values = cu.fetchall()
print(values)
tables = []
for v in values:
tables.append(v[0])
if table_name not in tables:
return False # 可以建表
else:
return True
(2)打印功能序列表。
- 定义菜单函数
# 菜单函数
def cd():
os.system('cls')
print("学员管理系统")
print("1、添加学生分数信息")
print("2、查看全部学生的分数")
print("3、查看数据段内的学生分数")
print("4、退出")
(3)程序入口创建数据库。
if __name__ == '__main__':
# 创建数据库
conn = sqlite3.connect("student_score.db")
# 创建一个游标
cu = conn.cursor()
# 如果没有表执行建表的sql语句
if (check("student_score.db","scores") == False):
sql_1 = """
create table scores(姓名 TEXT,
班级 TEXT,
性别 TEXT,
语文 NUMBER,
数学 NUMBER ,
英语 NUMBER,
总分 NUMBER);
"""
cu.execute(sql_1)
while True:
op = int(input('请输入需要选择的功能:'))
if op == 1:
S_name = input("请输入添加到的学生的姓名(如:张三):")
S_class = input("请输入要添加的学生班级(如:一班):")
S_sex = input("请输入添加的学生的性别:")
S_chinese = int(input("请输入该学生的语文成绩(只输入一个数字,如82):"))
S_maths = int(input("请输入该学生的数学成绩(只输入一个数字,如82):"))
S_English = int(input("请输入该学生的英语成绩(请输入一个数字,如82):"))
S_gi = S_chinese + S_maths + S_English
data = [(S_name,S_class,S_sex,S_chinese,S_maths,S_English,S_gi)]
cu.executemany("insert into scores values (?,?,?,?,?,?,?)",data)
# 提交数据库
conn.commit()
print("成功!")
os.system("pause")
os.system("cls")
cd()
elif op == 2:
info_list = find_tb()
print("全部学生的信息(排名部分先后):")
for i in range(len(info_list)):
print("第"+str(i+1)+"个")
print("学生成绩:"+str(info_list[i][0]))
print("学生班级:"+str(info_list[i][1]))
print("学生性别:"+str(info_list[i][2]))
print("学生性别:"+str(info_list[i][2]))
print("学生语文成绩:"+str(info_list[i][3]))
print("学生数学成绩:"+str(info_list[i][4]))
print("学生英语成绩:"+str(info_list[i][5]))
print("学生总成绩:"+str(info_list[i][6]))
os.system("pause")
os.system("cls")
cd()
elif op == 3:
info_list = find_tb()
fen = int(input("请输入要查询的分段:"))
for i in range(len(info_list)):
if info_list[i][6] >=fen:
print("查询结果;")
print("第"+str(i+1)+"个")
print("学生总成绩:"+ str(info_list[i][6]))
os.system("pause")
os.system("cls")
cd()
elif op == 4:
os.system("cls")
break