Python--如何在python中操作数据库-mysql

PyMysql 是一个 纯PythonMysql客户端库,大多数的公共API都兼容mysqlclientmysqldb.

# 1. 连接
conn = pymysql.connect(
    user = 'root',  # 用户名
    password = '111111',  # 用户密码
    db = 'aaa',   # 连接的数据库
    charset = 'gbk',   # 设置字符编码
    cursorclass=pymysql.cursors.DictCursor    # 设置游标类型,已返回不同类型数据
)
# 👆  只是完成了连接

# 2. 创建游标
cursor = conn.cursor()
# 👆 相当用创建了数据库操纵对象,获取数据的工具

# 3. 执行sql语句
cursor.execute('select * from student')  # 返回了3条数据

# 4. 获取数据
result = cursor.fetchall()
print(result)  
# 默认返回嵌套的元组,元组里的每一个元组是一行数据,未设置cursorclass的情况下
# 如果设置cursorclass=pl.cursors.DictCursor,返回的是一个字典列表,每个字典就是一行数据

# 5. 执行完毕之后关闭游标 
cursor.close()

# 6. 关闭连接
conn.close()

第二种方式 :

# 1. 连接
conn = pymysql.connect(
    user = 'root',  # 用户名
    password = '111111',  # 用户密码
    db = 'aaa',   # 连接的数据库
    charset = 'gbk',   # 设置字符编码
    cursorclass=pymysql.cursors.DictCursor    # 设置游标类型,已返回不同类型数据
)

with conn.cursor() as cursor:
    sql = 'select * from student where stuAge >%s and stuAge<%s'
    cursor.execute(sql,(1,22))  # 拼接参数传给execute 方法 ,避免sql注入
    res = cursor.fetchone()  # 获取查询到的第1条数据
    res2 = cursor.fetchmany(2)   # 获取已取数据的后面3条数据
    res_all = cursor.fetchall()   # 获取查询剩下的所有数据
    
    print(res_all)
conn.close()

相比较为省略emmm 简单的一些是这样的..

conn = pymysql.connect(
    user = 'root',  # 用户名
    password = '111111',  # 用户密码
    db = 'aaa',   # 连接的数据库
    charset = 'gbk',   # 设置字符编码
    cursorclass=pymysql.cursors.DictCursor    # 设置游标类型,已返回不同类型数据
)
with conn as cursor:
    sql = 'select * from student where stuAge >%s and stuAge<%s'
    cursor.execute(sql,(1,22))  
    #数据的获取
    print(cursor.fetchmany(3))   # fetch one   返回一条数据  fetchmany  自定义N条数据  fetchall  所以数据
conn.close()

使用PyMysql 进行 , , 操作:

import pymysql.cursors
# 配置数据库连接信息
db ={
    'user':'root',
    'password':'111111',
    'db':'aaa',
    'charset':'gbk',
}
# 连接数据库
conn = pymysql.connect(**db)
# pymysql 增 , 删 改 默认启动事务
try:
    with conn.cursor() as cursor:
        # 构造sql 语句
        sql1 = 'insert into grade(gid , gName) values(77 , "软件三班")'
        sql2 = 'insert into grade(gid , gName) values(78 , "软件三班")'
        # 执行sql 语句
        cursor.execute(sql1)
        cursor.execute(sql2)
        # 提交事务
        conn.commit()
except Exception as e:
    print(e)
    conn.rollback()
finally:
    conn.close()

 

# 数据库  修改 :
import random
try:
    with conn as cursor:
        sql = 'select stuId from student'
        cursor.execute(sql)
        ids = cursor.fetchall()
        print(ids)
        sqls = 'update student set stuAge = %s where stuId = %s'
        for item in ids:
            cursor.execute(sqls,(random.randint(10,36),item['id']))  # ids返回的是字典key:value 所以取值用item['id']
        conn.commit()
except Exception as e:
    print(e)
    conn.rollback()
finally:
    conn.close()

注意 :

1. pymysql 中执行的 sq| 语句不需要加;
2. execute 执行完查询后不直接返回结果,需要主动调用方法获取
3.要释放资源,关闭游示与连接 # cursor , conn
4.事务的回滚与提交  # rollback  , commit

posted @ 2019-11-25 15:51  逍遥大帝  阅读(880)  评论(0编辑  收藏  举报