zoukankan      html  css  js  c++  java
  • 用Python操作MySQL(pymysql)

    用python来操作MySQL,首先需要安装PyMySQL库(pip install pymysql)。

    连接MySQL:

    import pymysql
    connect=pymysql.connect(host='localhost',user='root',password='xxxx',port=3306)

    注:此时还未创建数据库,如已创建数据库,在连接时需再加上一个参数db

    注:host为指定的连接服务器的地址,设置为'localhost'代表连接到本地的MySQL服务上,user为用户名,password为密码,port为指定的端口(默认为3306)。

    创建游标:(我们需要用游标来执行各种操作)

    cursor=connect.cursor()

    关闭游标:

    cursor.close()

    关闭连接:

    connect.close()

    执行单条sql语句:

    cursor.execute(...)

    执行多条sql语句:

    cursor.executemany(...)

    提交事务:

    connect.commit()

    回滚事务:

    connect.rollback()

    在Python中对数据库进行增删改等操作使用的是事务处理,因此在执行增删改SQL语句后,需要提交事务才能在数据库中完成操作,并且还需添加错误判断,当执行SQL语句失败后,需要对事务进行回滚。增删改模板如下:

    sql='...'

    try: cursor.execute(sql) connect.commit() except: connect.rollback()

    创建数据库:

    cursor.execute("CREATE DATABASE db_test DEFAULT CHARACTER SET utf8")   #创建名为db_test的数据库

    选择数据库:

    connect.select_db('db_name')

    创建表:

    sql='CREATE TABLE IF NOT EXISTS students (id VARCHAR(255) NOT NULL,name VARCHAR(255)
    NOT NULL,age INT NOT NULL,PRIMARY KEY(id))'  #创建一个名为students的数据表,分为id,name和age三列,其中id为主键
    cursor.execute(sql)

    插入数据:

    id='001'
    name='Hu'
    age=5
    
    sql='INSERT INTO students(id,name,age) VALUES (%s,%s,%s)'
    
    try:
        cursor.execute(sql,(id,name,age))
        connect.commit()
    except:
        connect.rollback()

    修改数据:

    sql='UPDATE students SET age=%s WHERE name=%s'
    
    try:
        cursor.execute(sql,(4,'Hu'))
        connect.commit()
    except:
        connect.rollback()

    更新数据(如果数据存在,则更新数据,如果数据不存在,则插入数据):

    data={'id':'002',
          'name':'Bo',
          'age':11}
    #为了方便修改数据,把数据以字典形式传入,这样就不需要修改sql语句了
    
    table='students'
    
    keys=','.join(data.keys())
    values=','.join(['%s']*len(data))
    
    sql='INSERT INTO {table}({keys}) VALUES ({values}) ON DUPLICATE KEY UPDATE '.format(table=table,keys=keys,values=values)
    #相当于INSERT INTO students(id,name,age) VALUES (%s.%s,%s) ON DUPLICATE KEY UPDATE
    
    update=','.join(["{key}=%s".format(key=key) for key in data.keys()])
    #相当于id=%s,name=%s,age=%s
    
    sql=sql+update
    
    try:
        cursor.execute(sql,tuple(data.values())*2)
        connect.commit()
        print("Sucessful")
    except:
        connect.rollback()
        print("Failed")

    删除数据:

    sql='DELETE FROM xxx WHERE ...'
    
    try:
        cursor.execute(sql)
        connect.commit()
    except:
        connect.rollback()

    连接MySQL数据库+增删改操作的完整模板如下:

    import pymysql
    
    connect = pymysql.connect(host='...',   # IP地址
                    port=3306,   # 端口号
                    user='...',   # 用户名
                    password='...',   # 密码
                    db='...',   # 数据库名
                    charset='utf8')   # 链接字符集
    
    cursor = connect.cursor()   # 创建游标
    
    sql='...'
    
    try:
        cursor.execute(sql)  # 执行SQL语句
        connect.commit()   # 提交事务
    except Exception as e:
        connect.rollback()  # 如果发生错误,则回滚事务
    finally:
        cursor.close()  # 关闭游标
        connect.close()  # 关闭数据库

    查询数据:

    sql='SELECT * FROM xxx WHERE ...'
    cursor.execute(sql)

    获取查询结果的条数:

    cursor.rowcount

    获取第一条数据:(元组形式)

    cursor.fetchone()

    获取所有数据:

    cursor.fetchall()

    获取指定数量的数据:

    cursor.fetchmany(num)

    逐条获取数据:

    results = cursor.fetchall()
    
    for row in results:
        print(row)

    fetchall()会将结果以元组形式全部返回,如果数据量很大,那么占用的开销会非常高。因此,推荐使用如下方法来逐条读取数据:

    row=cursor.fetchone()
    
    while row:
        print(row)
        row=cursor.fetchone()

    总结来说,执行什么样的操作要根据SQL语句来定。因此需要学习好SQL的语法。

    参考:https://cuiqingcai.com/5578.html

               https://cloud.tencent.com/developer/article/1457448

  • 相关阅读:
    写给理工科人看的乐理(一)声学基础
    魔方最少记忆还原法
    甲乙两人互猜数字(鬼谷子问题)的逻辑推理与算法建模
    模板元编程实现素数判定
    UVa OJ 194
    UVa OJ 175
    UVa OJ 197
    UVa OJ 180
    UVa OJ 140
    判断input或者div.span等标签是否存在
  • 原文地址:https://www.cnblogs.com/HuZihu/p/10229068.html
Copyright © 2011-2022 走看看