zoukankan      html  css  js  c++  java
  • 【mysql-03】python连接数据库及使用

    一、Python连接Mysql数据库的几种方式(了解)

    • MysqlDB
      • 是python2.x连接数据库的工具,曾使用非常广泛
      • 现在由于进入了python3.x时代,基本已经废弃了
    • MysqlClient
      • 是mysqldb的衍生版本,兼容mysqldb
      • 是django的orm映射工具
    • PyMysql
      • 是一个纯Python开发的工具,也兼容mysqldb
      • 使用简单,功能强大
    • SQLAlChemy
      • 是一个既支持纯sql语言,也支持ORM映射的工具

    python3 安装pymysql:

    –>pip install pymysql

    二、基础知识

    2.1 使用流程

    2.2 游标

    类似于指针,指针是指向数据的地址

    在计算机中,我们获取数据不是直接获取的,而是通过地址获取,而指针就是指向地址的探头,通过指针,我们才能访问到具体的数据。

    三、创建,查询,增,改,删除等操作

    3.1 创建表

    代码

    #创建表

    # 1 导包

    import pymysql

    # 2 建立连接

    db_conn = pymysql.connect(host='10.XXXXX', #改成地址

    user='root',

    password='669988',

    port=33066,

    database='test',

    charset='utf8')

    # 3 获取游标

    cursor = db_conn.cursor()

    # 4 如果数据表已经存在使用execute()方法删除表。

    cursor.execute("DROP TABLE IF EXISTS EMPLOYEE")

    # 创建数据表SQL语句

    sql = """CREATE TABLE EMPLOYEE (

    FIRST_NAME CHAR(20) NOT NULL,

    LAST_NAME CHAR(20),

    AGE INT,

    SEX CHAR(1),

    INCOME FLOAT )"""

    cursor.execute(sql)

    # 5 关闭游标

    cursor.close()

    # 6 关闭连接

    db_conn.close()

    使用navicate查看:

    3.2 新增单个

    代码:和上面相同,删除掉之

    # 4 执行插入语句

    sql = """INSERT INTO EMPLOYEE(FIRST_NAME,

    LAST_NAME, AGE, SEX, INCOME)

    VALUES ('Mac', 'Mohan', 20, 'M', 2000)"""

    try:

    cursor.execute(sql)

    # 提交到数据库执行

    db_conn.commit()

    except:

    # 发生错误时回滚

    db_conn.rollback()

    # 5 查看执行结果

    # 注意:写入语句不能通过fetchone和fetchall来查看

    cursor.execute(f"SELECT * FROM EMPLOYEE WHERE INCOME > {1000}")

    print("全部结果:", cursor.fetchall())

    结果:

    3.3 新增多个

    代码:

    #另一种插入数据的方式,通过字符串传入值

    sql = "insert into EMPLOYEE values(%s,%s,%s,%s,%s)"

    insert = cur.executemany(sql,[('wang','b',30,'M',10000),('an','hy',27,'W',6000)])

    print ('批量插入返回受影响的行数:',insert)

    cursor.close()

    conn.commit()

    也可以直接服务器查看结果:

    3.4 修改

    主要代码:

    update_sql = f"UPDATE EMPLOYEE SET AGE = AGE + 1 WHERE SEX = '{'M'}'"

    cursor.execute(update_sql)

    # 查看结果

    cursor.execute(f"SELECT * FROM EMPLOYEE")

    print("全部结果:", cursor.fetchall())

    结果:

    3.5 删除

    主要代码:

    # 4 执行删除语句

    delete_sql = f"DELETE FROM EMPLOYEE WHERE AGE > {30}"

    cursor.execute(delete_sql)

    # 查看删除结果

    cursor.execute(f"SELECT * FROM EMPLOYEE")

    print("删除之后的结果: {}".format(cursor.fetchall()))

    db_conn.commit()

    四、事务回滚

    4.1 事务的概念:

    介绍: 事务是对一组工作序列的操作,这组操作要么全部成功,要么全部失败。

    例子: 银行转行案例

    特点(重点) :事务有4个特点(ACID)

    原子性: 是指事务就像原子一样不可分割

    一致性: 事务提交前后,数据的状态不会发生改变

    隔离性(最难): 是指事务与事务之间不能相互干扰

    持久性: 提交事务后,对数据状态的改变是永久性。

    注意:使用事务的数据库,理论上只能够通过事务来改变数据。

    详细的可见上一章节

    4.2 数据库事务提交的机制

    自动提交:

    建立连接时通过,autocommit的值进行设置

    建立连接之后,通过conn.autocommit(True)进行设置

    手动提交:

    指在未开启自动提交事务之前,可以使用手动提交事务

    conn.commit() 提交事务

    conn.rollback() 回滚事务

    4.3 事务操作举例

    代码:

    import pymysql

    db_conn = pymysql.connect(host='10.19.XXX',

    user='root',

    password='669988',

    port=33066,

    database='test',

    charset='utf8')

    cursor = db_conn.cursor()

    #修改前查询所有数据

    cursor.execute("select * from EMPLOYEE")

    print("修改前的数据为:")

    for res in cursor.fetchall():

    print(res)

     

    print("*"*40)

    cursor.execute("update EMPLOYEE set INCOME=3000 where FIRST_NAME='Mac'")

    #修改后查询所有数据

    cursor.execute("select * from EMPLOYEE")

    print("修改后的数据为:")

    for res in cursor.fetchall():

    print(res)

       

    print("*"*40)

    #回滚事务

    db_conn.rollback()

    #回滚后查询所有数据

    cursor.execute("select * from EMPLOYEE")

    print("回滚后的数据为:")

    for res in cursor.fetchall():

    print(res)

       

    cursor.close()

    db_conn.commit()

    db_conn.close()

    print('sql执行成功')

    查看数据库:

    五、完整实例

    结果:

    例子代码:

    '''插入100条数据到数据库(一次插入多条)'''

    import pymysql

    import string,random

    #打开数据库连接

    conn = pymysql.connect(host='10.19.156.252',

    user='root',

    password='669988',

    port=33066,

    charset='utf8')

    conn.select_db('test')

    #获取游标

    cur=conn.cursor()

       

    #创建user表

    cur.execute('drop table if exists user')

    sql = """CREATE TABLE IF NOT EXISTS user (

    id int(11) NOT NULL AUTO_INCREMENT,

    name varchar(255) NOT NULL,

    age int(11) NOT NULL,

    PRIMARY KEY (`id`)

    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=0"""

    cur.execute(sql)

    #修改前查询所有数据

    cur.execute("select * from user;")

    print('修改前的数据为:')

    for res in cur.fetchall():

    print (res)

       

    print ('*'*40)

    #循环插入数据

    words=list(string.ascii_letters)

    sql="insert into user values(%s,%s,%s)"

    random.shuffle(words)#打乱顺序

    cur.executemany(sql,[(i+1,"".join(words[:5]),random.randint(0,80)) for i in range(100) ])

       

    #插入100条后查询所有数据

    cur.execute("select * from user;")

    print('修改后的数据为:')

    for res in cur.fetchall():

    print (res)

    print ('*'*40)

       

    cur.close()

    conn.commit()

    conn.close()

    print('sql执行成功')

    数据库操作之python连接mysql的四种方式、pymysql操作数据库、事务 https://blog.csdn.net/limy_liu/article/details/103831912

    https://blog.csdn.net/kongsuhongbaby/article/details/84948205

  • 相关阅读:
    taglib
    ThinkPHP魔术方法
    给图片添加文字
    公益筹模板
    清空(数据库+文件夹)
    php——文件下载
    查询上一个tp语句
    安装wampserver 2.5的时候出现丢失MSVCR100.dll的解决办法。
    ThinkPHP3.2.3 安装教程
    java基础——File类的基本用法
  • 原文地址:https://www.cnblogs.com/yifanrensheng/p/14352542.html
Copyright © 2011-2022 走看看