码迷,mamicode.com
首页 > 数据库 > 详细

mysql工具

时间:2018-02-20 16:21:39      阅读:236      评论:0      收藏:0      [点我收藏+]

标签:inf   链接   insecure   sql   class   val   cursor   指定   注释   

工具介绍

生产环境还是推荐使用mysql命令行,但为了方便我们测试,可以使用IDE工具
下载链接:https://pan.baidu.com/s/1bpo5mqj

掌握:
#1. 测试+链接数据库
#2. 新建库
#3. 新建表,新增字段+类型+约束
#4. 设计表:外键
#5. 新建查询
#6. 备份库/表

#注意:
批量加注释:ctrl+?键
批量去注释:ctrl+shift+?键

MySQL数据备份

物理备份: 直接复制数据库文件,适用于大型数据库环境。但不能恢复到异构系统中如Windows。
逻辑备份: 备份的是建表、建库、插入等操作所执行SQL语句,适用于中小型数据库,效率相对较低。
导出表: 将表导入到文本文件中。

  1. 使用mysqldump实现逻辑备份
# 语法:
# mysqldump -h 服务器 -u用户名 -p密码 数据库名 > 备份文件.sql

# 示例:
# 单库备份:
$ mysqldump -uroot -pabc123 db > G:\\db_save.sql
mysqldump: [Warning] Using a password on the command line interface can be insecure.

# 多库备份,注意数据库之间直接用空格隔开即可,不能加逗号:
mysqldump -uroot -pabc123 --databases db1 db2 mysql db3 > db1_db2_mysql_db3.sql
#恢复多个库, 无须指定任何数据库名称,直接将目标数据库文件解压到数据库即可:
mysql -uroot -pabc123 < G:\\db1_db2.sql

# 备份所有库:
mysqldump -uroot -pabc123 --all-databases > all.sql

# 直接在数据库外部执行sql语句命令, 必须用双引号执行:
$ mysql -uroot -pabc123 -e "use db; show tables;"
mysql: [Warning] Using a password on the command line interface can be insecure.
+--------------+
| Tables_in_db |
+--------------+
| dept         |
| user_info    |
+--------------+
  1. 恢复逻辑备份
方法一,必须保证数据库db存在, 直接将备份的数据导入到数据库db中:
$ mysql -uroot -pabc123 db < G:\db1.sql

恢复多个库
mysql -uroot -pabc123 < G:\\db1_db2.sql

方法二:连接、创建并使用数据库, 在使用source命令将备份文件导入即可
mysql> use db1;
mysql> SET SQL_LOG_BIN=0;
mysql> source /root/db1.sql

Pymysql模块

  • 可以直接在python代码中连接mysql数据库并取出数据,
# 实例代码
import pymysql

user = input(‘用户名>>> ‘).strip()
pwd = input(‘密码>>> ‘).strip()

# 连接数据库并拿到游标
conn=pymysql.connect(host=‘localhost‘,user=‘root‘, passwd=‘abc123‘,db="db",charset=‘utf8‘)
cursor = conn.cursor()

sql = ‘select * from user WHERE username="%s" and password="%s";‘ % (user, pwd)
try:
    rows = cursor.execute(sql)  # 拿到受影响的行数
    print(sql)
    if rows:
        print(‘欢迎登陆!‘)
    else:
        print(‘用户名或密码不正确!‘)
except Exception as e:
    print(e)

cursor.close()
conn.close()
  • sql注入问题
# 情况1: 知道用户名直接跳过密码登陆数据库
用户名>>> kate" -- asas
密码>>> 
select * from user WHERE username="kate" -- asas" and password="";
欢迎登陆!

# 增加判断条件or
用户名>>> xxx" or 1=1 -- as
密码>>> 
select * from user WHERE username="xxx" or 1=1 -- as" and password="";
欢迎登陆
  • 怎么解决这个问题
import pymysql

user = input(‘用户名>>> ‘).strip()
pwd = input(‘密码>>> ‘).strip()

# 连接数据库并拿到游标
conn=pymysql.connect(host=‘localhost‘,user=‘root‘, passwd=‘abc123‘,db="db",charset=‘utf8‘)
cursor = conn.cursor()

sql = ‘select * from user WHERE username=%s and password=%s;‘
try:
    # 使用pymysql内置的功能进行连接字符串,避免了bug产生
    rows = cursor.execute(sql, [user, pwd])
    print(sql)
    if rows:
        print(‘欢迎登陆!‘)
    else:
        print(‘用户名或密码不正确!‘)
except Exception as e:
    print(e)

cursor.close()
conn.close()
  • 增删改
import pymysql
#链接
conn=pymysql.connect(host=‘localhost‘,user=‘root‘,password=‘123‘,database=‘egon‘)
#游标
cursor=conn.cursor()

#执行sql语句
# 自行拼接sql语句
# sql=‘insert into userinfo(name,password) values("root","123456");‘
# res=cursor.execute(sql) #执行sql语句,返回sql影响成功的行数
# print(res)

# 插入单行数据
# sql=‘insert into userinfo(name,password) values(%s,%s);‘
# res=cursor.execute(sql,("root","123456")) #执行sql语句,返回sql影响成功的行数
# print(res)

# 插入多行数据
sql=‘insert into userinfo(name,password) values(%s,%s);‘
res=cursor.executemany(sql,[("root","123456"),("lhf","12356"),("eee","156")]) #执行sql语句,返回sql影响成功的行数
print(res)

conn.commit() #提交后才发现表中插入记录成功
cursor.close()
conn.close()
  • 查询
import pymysql
#链接
conn=pymysql.connect(host=‘localhost‘,user=‘root‘,password=‘123‘,database=‘egon‘)
#游标
cursor=conn.cursor()

#执行sql语句
sql=‘select * from userinfo;‘
rows=cursor.execute(sql) #执行sql语句,返回sql影响成功的行数rows,将结果放入一个集合,等待被查询

# 取走后光标会跟着移动
res1=cursor.fetchone() 
res2=cursor.fetchone()
res3=cursor.fetchone()
res4=cursor.fetchmany(2)
res5=cursor.fetchall()
print(res1)
print(res2)
print(res3)
print(res4)
print(res5)
print(‘%s rows in set (0.00 sec)‘ %rows)

conn.commit() #提交后才发现表中插入记录成功
cursor.close()
conn.close()

mysql工具

标签:inf   链接   insecure   sql   class   val   cursor   指定   注释   

原文地址:https://www.cnblogs.com/fqh202/p/8455323.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!