python数据库建表格_python 操作 sqlite 数据库(建表, 增删改查)

import sqlite3

def create(conn):

"""

创建相应的数据表

"""

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

(?, ?, ?);

'''

# 下面写法会被 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, pwd):

"""

根据不同的条件查找数据

当用户名和密码都正确时, 查询数据

"""

sql = '''

SELECT

id, username, email

FROM

users

WHERE

username=? and password=?

'''

cursor = conn.execute(sql, (usr, pwd))

print('一条数据', list(cursor))

# 被 SQL 注入的情况

# usr = 'yin" or "1"="1'

# pwd = 'gua'

# sql = '''

# SELECT

# id, username, email

# FROM

# users

# WHERE

# username="{}" and password="{}"

# '''.format(usr, pwd)

# cursor = conn.execute(sql)

# print('一条数据', list(cursor))

def delete(conn, user_id):

"""

根据 id 删除对应的那条数据

"""

sql_delte = '''

DELETE FROM

users

WHERE

id=?

'''

# tuple 只有一个元素的时候必须是这种写法

conn.execute(sql_delte, (user_id,))

def update(conn, user_id, email):

"""

更新相应部分的数据

"""

sql_update = '''

UPDATE

`users`

SET

`email`=?

WHERE

`id`=?

'''

conn.execute(sql_update, (email, user_id))

def main():

# 指定数据库名字并打开, 无此数据库, 自动创建

db_path = 'web.sqlite'

conn = sqlite3.connect(db_path)

print("打开了数据库")

# create(conn)

# insert(conn, 'sql_', '123', 'a@qq.com')

# delete(conn, 1)

update(conn, 3, '119@qq.com')

select(conn, 'asdads', 'asd')

# 必须用 commit 函数提交你的修改

# 否则你的修改不会被写入数据库

conn.commit()

conn.close()

if __name__ == '__main__':

main()

以上程序中所用到的知识点如下:sqlitebrowser# sqlite 的数据库管理软件 sqlitebrowser

# 下载地址: 点此下载连接数据库用法: conn = sqlite3.connect(db_path)

# db_path 即为数据库文件路径

# 若无此数据库, 会自动创建执行 sql 语句用法: conn.execute(sql)

# 括号里即为需执行的 sql 语句参数传递的两种方法用到 ?, execute 的参数拼接

# 参数拼接要用 ?, execute 中的参数传递必须是一个 tuple 类型

用到 {}, format 的参数拼接

# 用 string.format 拼 sql, 是一个严重的安全漏洞, 会被 SQL 注入错误提示 database is locked# SQLite 只支持库级锁

# 库级锁意味着同时只能允许一个写操作

# 出现此问题, 应将多余的写操作进程关闭被 SQL 注入的情况# 见上程序 select 函数注释部分提交数据库修改用法: conn.commit()

# 必须用 commit 函数提交你的修改, 否则修改不会被写入数据库数据库连接的关闭用法: conn.close()

# 数据库使用结束后, 需要关闭数据库

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值