拆表
将分组结果插入另一张表里
insert into goods_cates (name) select cate_name from goods group by cate_name; # 注意,不用加values
同步数据表,把一张表字段覆盖到另一张表上
update goods as g inner join goods_cates as c on g.cate_name = c.name set g.cate_name = c.id;
改字段的类型 change
创建外键
alter table goods add foreign Key (cate_id) references goods_cates(id);
删掉外键
alter table goods drop foreign Key 外键名; # 外键名可以通过语句"show create table good;"查询
from pymysql import * def main(): # 创建Connection连接 connc = connect(host="localhost", port=3306, user="root", password="root", database="python02", charset="utf8") # 获得Cursor对象 csl = connc.cursor() # csl相当于游标,查询结果保存在里面,每执行一次csl.fetchone()会自动指向下一行数据。csl.fetchmany(x),x接受参数;csl.fetchall()返回所有数据,格式为一个元组嵌套另一个元组;# 执行select语句,并返回受影响的行数:查询一条数据 count = csl.execute('SELECT id, name FROM students2 WHERE gender = 2')
# 打印受影响的行数
print("查询到%d条数据" % count)
for i in range(count):
# 获取当前的结果
result = csl.fetchone()
# 打印查询的结果
print(result)
# 关闭Cursor对象
csl.close()
connc.close()
if __name__ == "__main__": main()
增删改这三个需要修改数据库的地方,在操作完,关闭连接之前,需要加上
conn.commit()
撤销刚才的操作,在commit()之前,运行
conn.rollback()
防止MySQL的注入
注意:符号--会注释掉它之后的sql,正确的语法:--后至少有一个任意字符
根本原理:就根据程序的字符串拼接name='%s',我们输入一个xxx' -- haha,用我们输入的xxx加'在程序中拼接成一个判断条件name='xxx' -- haha'
最后那一个空格,在一条sql语句中如果遇到select * from t1 where id > 3 -- and name='egon';则--之后的条件被注释掉了 #1、sql注入之:用户存在,绕过密码 egon' -- 任意字符 #2、sql注入之:用户不存在,绕过用户与密码 xxx' or 1=1 -- 任意字符
# 原来是我们对sql进行字符串拼接 # sql="select * from userinfo where name='%s' and password='%s'" %(user,pwd) # print(sql) # res=cursor.execute(sql) #改写为(execute帮我们做字符串拼接,我们无需且一定不能再为%s加引号了) sql="select * from userinfo where name=%s and password=%s" #!!!注意%s需要去掉引号,因为pymysql会自动为我们加上 res=cursor.execute(sql,[user,pwd]) #pymysql模块自动帮我们解决sql注入的问题,只要我们按照pymysql的规矩来。