day25 mysql数据库入门 (5)

除数据

delete from 表名; delete from 表名 where 条件; delete from tb1; delete from tb1 where; delete from tb1 where and password="123"; delete from tb1 where id>9;

数据

update 表名 set 列名=值; update 表名 set 列名=值 where 条件; update tb1 set; update tb1 set where id=1; update tb1 set age=age+1; -- 整型 update tb1 set age=age+1 where id=2; update L3 set name=concat(name,"db"); update L3 set name=concat(name,"123") where id=2; -- concat一个函数,可以拼接字符串

询数据

select * from 表名; select 列名,列名,列名 from 表名; select 列名,列名 as 别名,列名 from 表名; select * from 表名 where 条件; select * from tb1; select id,name,age from tb1; select id,name as N,age, from tb1; select id,name as N,age, 111 from tb1; select * from tb1 where id = 1; select * from tb1 where id > 1; select * from tb1 where id != 1; select * from tb1 where and password="123";

4.2 Python代码操作

day25 mysql数据库入门

import pymysql # 连接MySQL,自动执行 use userdb; -- 进入数据库 conn = pymysql.connect(host=\'127.0.0.1\', port=3306, user=\'root\', passwd=\'root123\', charset="utf8", db=\'userdb\') cursor = conn.cursor() # 1.新增(需commit) """ cursor.execute("insert into tb1(name,password) values(\'武沛齐\',\'123123\')") conn.commit() """ # 2.删除(需commit) """ cursor.execute("delete from tb1 where id=1") conn.commit() """ # 3.修改(需commit) """ cursor.execute("update tb1 set name=\'xx\' where id=1") conn.commit() """ # 4.查询 """ cursor.execute("select * from tb where id>10") data = cursor.fetchone() # cursor.fetchall() print(data) """ # 关闭连接 cursor.close() conn.close()

其实在真正做项目开发时,流程如下:

第一步:根据项目的功能来设计相应的 数据库 & 表结构(不会经常变动,在项目设计之初就确定好了)。

第二步:操作表结构中的数据,已达到实现业务逻辑的目的。

例如:实现一个 用户管理系统。

先使用MySQL自带的客户端创建相关 数据库和表结构(相当于先创建好Excel结构)。

create database usersdb default charset utf8 collate utf8_general_ci; create table users( id int not null primary key auto_increment, name varchar(32), password varchar(64) )default charset=utf8;

再在程序中执行编写相应的功能实现 注册、登录 等功能。

import pymysql def register(): print("用户注册") user = input("请输入用户名:") # alex password = input("请输入密码:") # sb # 连接指定数据 conn = pymysql.connect(host=\'127.0.0.1\', port=3306, user=\'root\', passwd=\'root123\', charset="utf8", db="usersdb") cursor = conn.cursor() # 执行SQL语句(有SQL注入风险,稍后讲解) # sql = \'insert into users(name,password)values("alex","sb")\' sql = \'insert into users(name,password) values("{}","{}")\'.format(user, password) cursor.execute(sql) conn.commit() # 关闭数据库连接 cursor.close() conn.close() print("注册成功,用户名:{},密码:{}".format(user, password)) def login(): print("用户登录") user = input("请输入用户名:") password = input("请输入密码:") # 连接指定数据 conn = pymysql.connect(host=\'127.0.0.1\', port=3306, user=\'root\', passwd=\'root123\', charset="utf8", db="usersdb") cursor = conn.cursor() # 执行SQL语句(有SQL注入风险,稍后讲解) # sql = select * from users where name=\'wupeiqi\' and password=\'123\' sql = "select * from users where name=\'{}\' and password=\'{}\'".format(user, password) cursor.execute(sql) result = cursor.fetchone() # 去向mysql获取结果 # None # (1,wupeiqi,123) # 关闭数据库连接 cursor.close() conn.close() if result: print("登录成功", result) else: print("登录失败") def run(): choice = input("1.注册;2.登录") if choice == \'1\': register() elif choice == \'2\': login() else: print("输入错误") if __name__ == \'__main__\': run()

So,你会发现, 在项目开发时,数据库 & 数据表 的操作其实就做那么一次,最最常写的还是 对数据行 的操作。

5.关于SQL注入

假如,你开发了一个用户认证的系统,应该用户登录成功后才能正确的返回相应的用户结果。

import pymysql # 输入用户名和密码 user = input("请输入用户名:") # \' or 1=1 -- pwd = input("请输入密码:") # 123 conn = pymysql.connect(host=\'127.0.0.1\', port=3306, user=\'root\', passwd=\'root123\', charset="utf8",db=\'usersdb\') cursor = conn.cursor() # 基于字符串格式化来 拼接SQL语句 # sql = "select * from users where name=\'alex\' and password=\'123\'" # sql = "select * from users where name=\'\' or 1=1 -- \' and password=\'123\'" sql = "select * from users where name=\'{}\' and password=\'{}\'".format(user, pwd) cursor.execute(sql) result = cursor.fetchone() print(result) # None,不是None cursor.close() conn.close()

如果用户在输入user时,输入了: \' or 1=1 -- ,这样即使用户输入的密码不存在,也会可以通过验证。

为什么呢?

因为在SQL拼接时,拼接后的结果是:

select * from users where name=\'\' or 1=1 -- \' and password=\'123\'

注意:在MySQL中 -- 表示注释。

那么,在Python开发中 如何来避免SQL注入呢?

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzgswx.html