# 常用的关系型数据库有 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 sqlite3
def 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
)
'''
Python 操作数据库
最新推荐文章于 2020-12-11 00:31:18 发布