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)    收藏  举报

导航