zoukankan      html  css  js  c++  java
  • pymysql模块+mysql库/表备份和恢复+事务(锁)

    pymysql模块+mysql库/表备份+事务(锁)

    pymysql模块

    查询数据

    import pymysql
    conn=pymysql.connect(host='127.0.0.1',user='root',password='123',database='homework')    #host是目标数据库ip地址,user是数据库授权用户,password是用户密码,database是数据库
    
    cur=conn.cursor()   #设置游标 其中括号内可以写cursor=pymysql.cursors.DictCorsor,表示查询的时候输出为字典形式
    
    sql='select * from student;' #其中;可加可不加
    cur.execute(sql)
    ret1=cur.fetchone()     #从数据库取出一行数据
    print(ret1)
    #(1, '男', 1, '理解')
    ret2=cur.fetchmany(10)  #从数据库取出十行数据,注意,前面已经拿出了一个数据,所有会从第二个数据开始取,类似于迭代器
    print(ret2)
    #((2, '女', 1, '钢蛋'), (3, '男', 1, '张三'), (4, '男', 1, '张一'), (5, '女', 1, '张二'), (6, '男', 1, '张四'), (7, '女', 2, '铁锤'), (8, '男', 2, '李三'), (9, '男', 2, '李一'), (10, '女', 2, '李二'), (11, '男', 2, '李四'))
    
    ret3=cur.fetchall()		#从数据库取出所有数据
    print(ret3)
    #((12, '女', 3, '如花'), (13, '男', 3, '刘三'), (14, '男', 3, '刘一'), (15, '女', 3, '刘二'), (16, '男', 3, '刘四'))
    
    cur.close()
    conn.close()
    
    
    #rowcount:这是一个可读属性,可以查出操作了多少行
    import pymysql
    conn=pymysql.connect(host='127.0.0.1',user='root',password='123',database='homework')
    cur=conn.cursor()
    
    sql='select * from student'
    cur.execute(sql)
    print(cur.rowcount)
    for i in range(cur.rowcount):
        print(cur.fetchone())
    cur.close()
    conn.close()
    16
    (1, '男', 1, '理解')
    (2, '女', 1, '钢蛋')
    (3, '男', 1, '张三')
    (4, '男', 1, '张一')
    (5, '女', 1, '张二')
    (6, '男', 1, '张四')
    (7, '女', 2, '铁锤')
    (8, '男', 2, '李三')
    (9, '男', 2, '李一')
    (10, '女', 2, '李二')
    (11, '男', 2, '李四')
    (12, '女', 3, '如花')
    (13, '男', 3, '刘三')
    (14, '男', 3, '刘一')
    (15, '女', 3, '刘二')
    (16, '男', 3, '刘四')
    
    

    删除、修改、增加数据

    import pymysql
    conn=pymysql.connect(host='127.0.0.1',user='root',password='123',database='homework')
    cur=conn.cursor()
    
    try:
    	sql='insert into student values(17,"男","1","大黄");' #mysql执行语句 ,注意" "与''的问题
    	cur.execute(sql)
    	conn.commit()   	#这是区别于查询的地方,得提交命令
    except Exception as e:
    	print(e)
    	conn.rollback()		#若try中数据出现问题,将游标回滚至开始处,sql语句不生效
    	
    cur.close()
    conn.close()
    

    sql注入问题

    import pymysql
    name=input("uesrname:")
    pwd=input("password:")
    conn=pymysql.connect(host='127.0.0.1',user='root',password='123',database='users')
    cur=conn.cursor()
    
    sql='select * from userinfo where name=%s and pwd=%s;'  #这里不能使用"'select * from userinfo where name=%s and pwd=%s'%(name,pwd)",会产生sql注入问题
    cur.execute(sql,(name,pwd))
    print(cur.fetchone())
    cur.close()
    conn.close()
    

    pymysql表/库备份/恢复

    表的备份/恢复

    #表的备份
    #mysqldump -u用户 -p密码 -h目标数据库ip地址 库.表>存放的绝对地址
    C:Users81533>mysqldump -uroot -p123 -h127.0.0.1 homework.student>C:Users81533Desktopmysql_datastudent.sql
            
    #表的恢复
    mysql>source C:Users81533Desktopmysql_datastudent.sql
    

    库的备份/恢复

    • 库的重命名一般也可以采用先备份再删除原来的库,然后再备份库的sql文档中修改库名再恢复库即可
    #库的备份
    #mysqldump -uroot -p123 --databases 库名1,库名2,....(或者直接--all -databases:表示全部的库) >目标绝对路径   注意不加;
    C:Users81533>mysqldump -uroot -p123 --databases homework>C:Users81533Desktopmysql_datahomework.sql
            
    #库的恢复
    mysql>source homework>C:Users81533Desktopmysql_datahomework.sql
    

    事务(锁)

    begin;	#开启事务
    select * from student where id=1 forupdate;	#for update表示将对这一块内容进行修改操作,所以数据库会对其上锁,组织其他用户对这一块内容进行操作
    update student set age=18 where id=1;	#对内容进行修改
    commit;	#提交事务,结束锁,其他用户可以修改该块内容
    
  • 相关阅读:
    (转)导弹跟踪算法
    中文linux安装oracle界面乱码解决方案
    linux下创建oracle表空间
    [INS-20802] Oracle Net Configuration Assistant failed
    Centos6.5下Oracle 11g R2安装过程
    设置MYSQL数据库编码为UTF-8
    如何在linux系统中设置静态ip地址
    Oracle Net Configuration Assistant failed异常的解决方案
    解决安装oracle11g r2时提示pdksh conflicts with ksh-20100621-2.el6.i686问题
    CentOS增加swap分区大小
  • 原文地址:https://www.cnblogs.com/Programmatic-yuan/p/13040912.html
Copyright © 2011-2022 走看看