乐之之

知而行乐,乐而行之,天道酬勤,学无止境。
数据库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)

(4)添加对应功能序列表的功能。

    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

效果:

posted on 2022-12-03 23:31  乐之之  阅读(267)  评论(0编辑  收藏  举报