mysql与python的交互 pymysql
主键写0,null,default都自动递增
不是主键,默认,只能写default
1.拆为多个表
先创建一个新的表 if not exists 如果原来不存在就建立表
写入:insert into good_cates (name) select good_cates from good group by good_cates;
关联替换、同步
updata goods as g inner join good_cates as c on g.at_name = c.name
set g.cat_name = c.id;
两张表替换了也要替换字段的名字类型
设外键
alter table good add foreign key(cate_id) references good_cate(id);
取消外键 alter table drop foreign key 外键名称
极少使用外键,因为表的更新受外键关联,影响效率
创建插入一气呵成
2.pymysql
让写的代码当客户端写sql发给server
创建连接connect 获取游标cursor(特殊对象用于存储结果之类的) 记录了已取了哪些没有取哪些 游标
执行命令获取数据处理数据
关闭游标
关闭连接
2.1查询
execute 执行成功返回行数
fetch__查出的是一个元组 execute.fetchall
注册登录:写/查
2.2 添加修改删除
要修改数据库,所以要提交
commit提交,只有提交了数据库才会改动
conn.commit()
conn.rollback() 返回取消不提交
但是只要有execute increment就会递增
3.防止sql注入
百度一下了解更多 wooyun
不让用户拼接字符串
pymysql添加了构造参数列表
把要输入的数据放入列表
sql语句的参数化,可以有效防止sql注入
安全的方式
# 构造参数列表
params = [find_name]
# 执行select语句,并返回受影响的行数:查询所有数据
count = cs1.execute('select * from goods where name=%s', params)
# 注意:
# 如果要是有多个参数,需要进行参数化
# 那么params = [数值1, 数值2....],此时sql语句中有多个%s即可