# 常用的关系型数据库有 mysql postgresql sqlite 等(具体区别上课再说)## 传统数据库以表的形式存储数据# 一张表可以有很多个字段# 以用户表为例, 存储 4 个数据的表结构如下# 用户 id# 用户名# 密码# 邮箱## 范例数据如下# 1 gua 123 gua@qq.com# 2 gua1 23 gua1@q.com# 数据库通过 SQL 来操作数据# SQL (结构化查询语言)# 操作数据库的接口 也就是操作数据库的方法# 增加数据# 删除数据# 修改数据# 查询数据# CRUD# create retrieve update delete## 数据库的更多的概念,上课会解释(文字太苍白)# 请下载 sqlitebrowser 软件(这是一个管理 sqlite 数据库的免费软件,自行搜索或者等群内链接)# SQL 语句如下(仅为范例,上课会讲具体的语法)"""INSERT INTO `users`(`id`,`username`,`password`,`email`)VALUES \ (2,'','',NULL);UPDATE `users` SET `username`=? WHERE `_rowid_`='2';UPDATE `users` SET `password`=? WHERE `_rowid_`='2';UPDATE `users` SET `email`=? WHERE `_rowid_`='2';""""""几种关系型数据库的用法和 sql 语法都极度相似开发中一般会用 sqlite 数据库部署到服务器上的时候才会使用 mysql 等数据库下面是 python 操作 sqlite 数据库的范例代码注意,代码上课会讲,你不用看懂,也不用运行"""import sqlite3def create(conn): # 注意 CREATE TABLE 这种语句不分大小写 sql_create = ''' CREATE TABLE `users` ( `id` INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, `username` TEXT NOT NULL UNIQUE, `password` TEXT NOT NULL, `email` TEXT ) ''' # 用 execute 执行一条 sql 语句 conn.execute(sql_create) print('创建成功')def insert(conn, username, password, email): sql_insert = ''' INSERT INTO users(username,password,email) VALUES (?, ?, ?); ''' # 下面的写法用 string.format 拼 sql, 是一个严重的安全漏洞 # 会被 SQL 注入 # sql = ''' # INSERT INTO # users(username,password,email) # VALUES # ("{}", "{}", "{}") # '''.format('123', '345', 'a.com') # conn.execute(sql) # 参数拼接要用 ?,execute 中的参数传递必须是一个 tuple 类型 conn.execute(sql_insert, (username, password, email)) print('插入数据成功')def select(conn): # 一个注入的用户名 usr = 'gua" or "1"="1' pwd = 'gua' sql = ''' SELECT id, username, email FROM users WHERE username=? and pwe=? #WHERE # username="{}" and password="{}" #'''.format(usr, pwd) # 这是读取数据的套路 cursor = conn.execute(sql) print('所有数据', list(cursor)) # for row in cursor: # print(row)def delete(conn, user_id): sql_delete = ''' DELETE FROM users WHERE id=? ''' # 注意, execute 的第二个参数是一个 tuple # tuple 只有一个元素的时候必须是这样的写法 conn.execute(sql_delete, (user_id,))def update(conn, user_id, email): """ UPDATE `users` SET `email`='gua', `username`='瓜' WHERE `id`=6 """ sql_update = ''' UPDATE `users` SET `email`=? WHERE `id`=? ''' conn.execute(sql_update, (email, user_id))def main(): # 指定数据库名字并打开 db_path = 'web8.sqlite' conn = sqlite3.connect(db_path) print("打开了数据库") # 打开数据库后 就可以用 create 函数创建表 # create(conn) # 然后可以用 insert 函数插入数据 # insert(conn, 'sql4', '1234', 'a@b.c') # 可以用 delete 函数删除数据 # delete(conn, 1) # 可以用 update 函数更新数据 # update(conn, 1, 'gua@cocode.cc') # select 函数查询数据 # select(conn) # # 必须用 commit 函数提交你的修改 # 否则你的修改不会被写入数据库 conn.commit() # 用完数据库要关闭 conn.close()if __name__ == '__main__': main()'''CREATE TABLE `users` ( `id` INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, `username` TEXT NOT NULL UNIQUE, `password` TEXT NOT NULL, `email` TEXT)'''