Mysql_练习
https://www.cnblogs.com/liwenzhou/p/8032238.html
navicat 一个编辑mysql语句的可视化IDE
命令行转储为sql文件。
备份:数据库表结构 + 数据
mysqldump -u db1 > db1.sql -p (在bin目录有mysqldump可执行文件)
备份:只有数据表结构
mysqldump -u root -d db1 > db1.sql -p;
执行文件:
要先创建一个容器
create database db5;
mysqldump -u root db5 < db1.sql -p;
临时表:
SELECT number,corse_id FROM (SELECT * FROM score WHERE number > 60 )AS B;
就是得到结果又是一个新表,在新表上继续操作。
DISTINCT去重,但是效率不高
插入数据:
insert into tb(
id,
name,
number
)
SELECT student_id,2,(SELECT AVG(number) FROM score WHERE corse_id=2) FROM score WHERE corse_id != 2; 可以将select得到的新表,作为数据插入。
也可以在select前面的字段,设置为一个select语句。
SELECT student_id,
(SELECT number FROM score as s2 WHERE s2.student_id=s1.student_id and corse_id = 1) AS "生物",
(SELECT number FROM score as s2 WHERE s2.student_id=s1.student_id and corse_id = 1) AS "语文",
(SELECT number FROM score as s2 WHERE s2.student_id=s1.student_id and corse_id = 1) AS "数学"
FROM score as s1 GROUP BY student_id;
mysql思路:
-操作表
-设计表
pymysql安装:
pip3 install pymysql -i https://pypi.douban.com/simple
import pymysql #python3 是pymysql user = input("username") password = input("password") #打开链接柜子 conn = pymysql.connect(host="localhost",user="root",password="",database="db2") #用光标手取数据 cursor = conn.cursor() sql = "select * from userinfor where username = '%s' and password = '%s'" % (user,password) cursor.execute(sql) #因为上面只会获得一条数据,所以用fetchone,拿到mysql查询结果 result= cursor.fetchone() #关闭连接 cursor.close() conn.close() print(result)
但是上面不能防止SQL注入 (--在mysql是注释)
所以不要自己做字符串拼接
import pymysql #python3 是pymysql user = input("username") password = input("password") #打开链接柜子 conn = pymysql.connect(host="localhost",user="root",password="",database="db2") #用光标手取数据 cursor = conn.cursor() # sql = "select * from userinfor where username = %s and password = %s" # cursor.execute(sql,[user,password]) sql = sql = "select * from userinfor where username = %(u)s and password = %(p)s" cursor.execute(sql,{'u':user,'p':password}) #因为上面只会获得一条数据,所以用fetchone,拿到mysql查询结果 result= cursor.fetchone() #关闭连接 cursor.close() conn.close() print(result)
可以写作列表,或字典形式。
#增加,删除,修改数据库,要多加一条语句 conn.commit();
sql = "insert into userinfor(username,password) values('haha','wahaha')"
cursor.execute(sql)
conn.commit()
也可以使用占位符
user = "castie"
password = "qwerewr"
sql = "insert into userinfor(username,password) values(%s,%s)"
cursor.execute(sql,[user,password])
conn.commit()
也可以同时插入多条数据, 换了一个方法。
sql = "insert into userinfor(username,password) values(%s,%s)"
cursor.executemany(sql,[("hahaha","zzz"),("aaa","zzzz"),("bbb","zzzz")])
conn.commit()
execute与executemany方法,都有一个返回值,表示受影响的行数。
上面executemany一般适用于插入语句。
查数据:
sql = "select * from userinfor"
cursor.execute(sql)
cursor.scroll(1,mode="relative")#相对当前位置移动
cursor.scroll(0,mode="absolute")#相对绝对位置移动
result = cursor.fetchone()
result2 = cursor.fetchone() cursor也是个句柄位置,可以通过上面修改。
result = cursor.fetchmany(4) 从当前游标往下取四条数据
reslut = cursor.fetchall()取所有的结果
cursor()也是有参数的
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor),
这样察到的结果result就是以字典的形式展现(列表套字典),而不是上面的元祖套元祖。
新插入数据的自增ID
cursor.lastrowid() 返回新插入数据的自增id
--连接,关闭(游标)
--execute() --sql注入
--增删改: conn.commit()
--fetchone fetchall
--获取插入数据的自增ID
posted on 2018-08-09 15:11 castiel_lee 阅读(68) 评论(0) 收藏 举报
浙公网安备 33010602011771号