python调用sql_python中SQL的使用

#常用的关系型数据库有 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 数据库的范例代码

注意,代码上课会讲,你不用看懂,也不用运行"""

importsqlite3defcreate(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('创建成功')definsert(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('插入数据成功')defselect(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)

defdelete(conn, user_id):

sql_delete= '''DELETE FROM

users

WHERE

id=?'''

#注意, execute 的第二个参数是一个 tuple

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

conn.execute(sql_delete, (user_id,))defupdate(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))defmain():#指定数据库名字并打开

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

)'''

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值