介绍
操作流程:
- 导入
sqlite3
模块,python内置该模块 - 连接数据库
- 获取 cursor 游标
- 通过 cursor 游标执行 查询语句,获取结果
- 通过 cursor 游标执行 增删改sql语句,提交事务
- 关闭游标
- 关闭链接
代码模板:
import sqlite3
# 连接数据库
conn = sqlite3.connect("student.db")
print("conn:",conn) # CMySQLConnection
# 获取游标
cursor = conn.cursor()
# 通过游标执行sql语句
cursor.execute(sql)
# 如果是增删改操作,需要提交事务 或 回滚事务
conn.commit()
# 游标及时关闭
cursor.close()
# 关闭数据库
conn.close()
User表相关操作
User
表是保存登录相关信息的表
创建user表
import sqlite3
# 连接数据库
conn = sqlite3.connect("student.db")
print("conn:",conn)
# 获取游标
cursor = conn.cursor()
sql = '''
CREATE TABLE `user` (
`id` int NOT NULL,
`username` varchar(64) ,
`password` varchar(64),
PRIMARY KEY (`id`)
)
'''
# 通过游标执行sql语句
cursor.execute(sql)
# 游标及时关闭
cursor.close()
# 关闭数据库
conn.close()
插入数据
import sqlite3
# 连接数据库
conn = sqlite3.connect("student.db")
print("conn:",conn) # CMySQLConnection
# 获取游标
cursor = conn.cursor()
# sql = "insert into user(id,username,password) values (1,'lilei','123456')"
sql = "insert into user(id,username,password) values (2,'hanmeimei','111111')"
# 通过游标执行sql语句
cursor.execute(sql)
# 提交事务
conn.commit()
# 游标及时关闭
cursor.close()
# 关闭数据库
conn.close()
登录(缺陷)
原理:根据 用户名、密码 进行查询,能够 查询到就说明登录成功;查询不到就说明 用户名不存在或者密码错误
import sqlite3
username = 'lilei'
password = '123456'
# 连接数据库
conn = sqlite3.connect("student.db")
print("conn:",conn) # CMySQLConnection
# 获取游标
cursor = conn.cursor()
sql = "select * from user where username='{}' and password = '{}'".format(username,password)
print("sql:",sql)
# 通过游标执行sql语句
cursor.execute(sql)
res = cursor.fetchall()
for item in res:
print(item)
# 游标及时关闭
cursor.close()
# 关闭数据库
conn.close()
登录的bug
当用户名是下面内容的时候,不需要输入密码,也能登录:
username = "lilei' --"
username = "' or 1=1 --"
因为 --
表示注释,相当于 python中的 #
,后面内容被注释掉了
登录(占位符)
username = 'lilei'
# username = "lilei' --"
# username = "' or 1=1 --"
password = '123456'
# 连接数据库
conn = sqlite3.connect("student.db")
print("conn:",conn) # CMySQLConnection
# 获取游标
cursor = conn.cursor()
# 使用 ? 作为占位符
sql = "select * from user where username=? and password = ?"
print("sql:",sql)
# 通过游标执行sql语句,内部会将后面的数据替换掉 ?
cursor.execute(sql,(username,password))
res = cursor.fetchall()
for item in res:
print(item)
# 游标及时关闭
cursor.close()
# 关闭数据库
conn.close()
Student相关表
创建表
import sqlite3
# 连接数据库
conn = sqlite3.connect("student.db")
print("conn:",conn) # CMySQLConnection
# 获取游标
cursor = conn.cursor()
sql = '''
CREATE TABLE `student` (
`id` int NOT NULL,
`name` varchar(64) ,
`age` int DEFAULT NULL,
`sex` varchar(16) ,
PRIMARY KEY (`id`)
)
'''
# 通过游标执行sql语句
cursor.execute(sql)
# 游标及时关闭
cursor.close()
# 关闭数据库
conn.close()
插入数据
import sqlite3
# 连接数据库
conn = sqlite3.connect("student.db")
print("conn:",conn) # CMySQLConnection
# 获取游标
cursor = conn.cursor()
# sql = "insert into student(id,name,age,sex) values (1,'李雷',20,'男')"
sql = "insert into student(id,name,age,sex) values (2,'韩梅梅',19,'女')"
# 通过游标执行sql语句
cursor.execute(sql)
# 提交事务
conn.commit()
# 游标及时关闭
cursor.close()
# 关闭数据库
conn.close()
查询
import sqlite3
# 连接数据库
conn = sqlite3.connect("student.db")
print("conn:",conn) # CMySQLConnection
# 获取游标
cursor = conn.cursor()
sql = "select * from student"
# 通过游标执行sql语句
cursor.execute(sql)
res = cursor.fetchall()
for item in res:
print(item)
# 游标及时关闭
cursor.close()
# 关闭数据库
conn.close()
修改
import sqlite3
# 连接数据库
conn = sqlite3.connect("student.db")
print("conn:",conn) # CMySQLConnection
# 获取游标
cursor = conn.cursor()
sql = "update student set age = 25 where id=2"
# 通过游标执行sql语句
cursor.execute(sql)
# 提交事务
conn.commit()
# 游标及时关闭
cursor.close()
# 关闭数据库
conn.close()
删除
import sqlite3
# 连接数据库
conn = sqlite3.connect("student.db")
print("conn:",conn) # CMySQLConnection
# 获取游标
cursor = conn.cursor()
sql = "delete from student where id=1"
# 通过游标执行sql语句
cursor.execute(sql)
# 提交事务
conn.commit()
# 游标及时关闭
cursor.close()
# 关闭数据库
conn.close()