• 使用Python操作MySQL数据库


    使用Python操作MySQL数据库

    一、数据库的安装和连接

    1.1 PyMySQL的安装

    pip install pymysql

    1.2Python连接数据库

    import pymysql
    # 打开数据库连接
    db = pymysql.connect("数据库IP","用户","密码","数据库")
    
    # 通过 db 创建操作sql的 游标对象	
    # 注:游标不设置参数,查询的结果就是数据元组,数据没有标识性
    # 设置pymysql.cursors.DictCursor,查询的结果是字典,key是表的字段
    cursor = db.cursor(pymysql.cursors.DictCursor)	
    
    # 使用 execute()方法执行SQL语句
    # cursor.execute(sql, (参数1,参数2)) 执行单条SQL语句
    # cursor.executemany(sql, [(参数1,参数2),(参数1,参数2)]) 执行多条SQL语句
    data = cursor.execute("sql语句")
    
    print(data)
    
    # 提交到数据库执行
    # 重点:在创建conn对象时,不设置autocommit,默认开启事务,增删改操作不会直接映射到数据库中,需要执行 db.commit() 动作
    db.commit()	
    
    # 关闭数据库连接
    db.close()
    

    1.3连接数据库的基本操作

    # 选取操作的模块 pymysql
    
    # pymysql连接数据库的必要参数:主机、端口、用户名、密码、数据库
    # 注:pymysql不能提供创建数据库的服务,数据库要提前创建
    import pymysql
    
    # 1)建立数据库连接对象 conn
    # 2)通过 conn 创建操作sql的 游标对象
    # 3)编写sql交给 cursor 执行
    # 4)如果是查询,通过 cursor对象 获取结果
    # 5)操作完毕,端口操作与连接
    
    
    # 1)建立数据库连接对象 conn
    conn = pymysql.connect(user='root', passwd='root', database='oldboy')
    # conn = pymysql.connect(user='root', passwd='root', database='oldboy', autocommit=True)
    
    # 2)通过 conn 创建操作sql的 游标对象
    # 注:游标不设置参数,查询的结果就是数据元组,数据没有标识性
    # 设置pymysql.cursors.DictCursor,查询的结果是字典,key是表的字段
    cursor = conn.cursor(pymysql.cursors.DictCursor)
    
    # 3)编写sql交给 cursor 执行
    

    二、创建表操作

    import pymysql
    
    # 打开数据库连接
    #db = pymysql.connect("localhost", "testuser", "test123", "TESTDB")
    
    # 使用 cursor() 方法创建一个游标对象 cursor
    cursor = db.cursor()
    
    # 使用 execute() 方法执行 SQL,如果表存在则删除
    cursor.execute("DROP TABLE IF EXISTS EMPLOYEE")
    
    # 使用预处理语句创建表
    sql = """CREATE TABLE EMPLOYEE (
             FIRST_NAME  CHAR(20) NOT NULL,
             LAST_NAME  CHAR(20),
             AGE INT,  
             SEX CHAR(1),
             INCOME FLOAT )"""
    
    cursor.execute(sql)
    
    # 关闭数据库连接
    db.close()
    

    三、操作数据

    3.1插入操作

    import pymysql
    
    # 打开数据库连接
    db = pymysql.connect("localhost", "testuser", "test123", "TESTDB")
    
    # 使用cursor()方法获取操作游标
    cursor = db.cursor()
    
    # SQL 插入语句
    sql = """INSERT INTO EMPLOYEE(FIRST_NAME,
             LAST_NAME, AGE, SEX, INCOME)
             VALUES ('Mac', 'Mohan', 20, 'M', 2000)"""
    try:
        cursor.execute(sql)  # 执行sql语句
        db.commit()  # 提交到数据库执行
    except:
        db.rollback()  # 如果发生错误则回滚
    
    # 关闭数据库连接
    db.close()
    

    3.2 查询操作

    Python查询Mysql使用 fetchone() 方法偏移一条数据后获取单条数据,使用fetchall()方法获取多条数据。

    • fetchone(): 该方法获取下一个查询结果集。结果集是一个对象
    • fetchall(): 接收全部的返回结果行.
    • rowcount(): 这是一个只读属性,并返回执行execute()方法后影响的行数。
    • fetchmary(n):偏移n条数据后取出结果。
    import pymysql
    
    # 打开数据库连接
    db = pymysql.connect("localhost", "testuser", "test123", "TESTDB")
    
    # 使用cursor()方法获取操作游标
    cursor = db.cursor()
    
    # SQL 查询语句
    sql = "SELECT * FROM EMPLOYEE 
           WHERE INCOME > %s" % (1000)
    try:
    
        cursor.execute(sql)  # 执行SQL语句
        results = cursor.fetchall()  # 获取所有记录列表
        for row in results:
            fname = row[0]
            lname = row[1]
            age = row[2]
            sex = row[3]
            income = row[4]
            # 打印结果
            print ("fname=%s,lname=%s,age=%s,sex=%s,income=%s" % 
                   (fname, lname, age, sex, income ))
    except:
        print("Error: unable to fetch data")
    
    # 关闭数据库连接
    db.close()
    

    3.3 更新操作

    import pymysql
    
    # 打开数据库连接
    db = pymysql.connect("localhost", "testuser", "test123", "TESTDB")
    
    # 使用cursor()方法获取操作游标
    cursor = db.cursor()
    
    # SQL 更新语句
    sql = "UPDATE EMPLOYEE SET AGE = AGE + 1 WHERE SEX = '%c'" % ('M')
    try:
        cursor.execute(sql)  # 执行SQL语句
        db.commit()  # 提交到数据库执行
    except:
        db.rollback()  # 发生错误时回滚
    
    # 关闭数据库连接
    db.close()
    

    3.4 删除操作

    import pymysql
    
    # 打开数据库连接
    db = pymysql.connect("localhost", "testuser", "test123", "TESTDB")
    
    # 使用cursor()方法获取操作游标
    cursor = db.cursor()
    
    # SQL 删除语句
    sql = "DELETE FROM EMPLOYEE WHERE AGE > %s" % (20)
    try:
        cursor.execute(sql)  # 执行SQL语句
        db.commit()  # 提交修改
    except:
        db.rollback()  # 发生错误时回滚# 关闭连接
    db.close()
    

    四、数据备份

    4.1 数据库的逻辑备份

    #语法:
    # mysqldump -h 服务器 -u用户名 -p密码 数据库名 > 备份文件.sql
    
    #示例:
    #单库备份
    mysqldump -uroot -p123 db1 > db1.sql
    mysqldump -uroot -p123 db1 table1 table2 > db1-table1-table2.sql
    
    #多库备份
    mysqldump -uroot -p123 --databases db1 db2 mysql db3 > db1_db2_mysql_db3.sql
    
    #备份所有库
    mysqldump -uroot -p123 --all-databases > all.sql
    

    4.2 数据恢复

    #方法一:
    [root@nick backup]# mysql -uroot -p123 < /backup/all.sql
    
    #方法二:
    mysql> use db1;
    mysql> SET SQL_LOG_BIN=0;   #关闭二进制日志,只对当前session生效
    mysql> source /root/db1.sql
    

    五、事务和锁

    事务:通常一些业务需要多条sql语句参与,参与的sql会形成一个执行整体,该整体外面就称之为事务。简而言之:事务就是保护多条之执行的sql语句。

    5.1 事务的四大特性

    1. 原子性:事务是一组不可分割的单位,要么同时成功,要么同时不成功。
    2. 一致性:事务前后的数据完整性应该保持一致(数据库的完整性:如果数据库在某一时间点下,所有的数据都符合所有的约束,则称数据库为完整性的状态)
    3. 隔离性:事务的隔离性是指多个用户并发访问数据时,一个用户的事务不能被其他用户的事务干扰,多个并发事务之间数据要相互隔离
    4. 持久性:持久性是指一个事务一旦被提交,它对数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响。

    总结:只有具备了这四大特性的sql语句才能被称之为事务。

    begin;  # 开启事务
    select * from emp where id = 1 for update;  # 查询id值,for update添加行锁;
    update emp set salary=10000 where id = 1; # 完成更新
    commit; # 提交事务
    
  • 相关阅读:
    【转载】关于C#中动态加载AppDomain的问题
    poj2239
    poj2231
    poj2229
    poj2234
    poj2236
    前 路
    只含一个单词的句子
    做人准则
    改变人生的32句励志名言
  • 原文地址:https://www.cnblogs.com/Lin2396/p/11631490.html
Copyright © 2020-2023  润新知