pymysql的使用

python操作MySQL


pymysql模块
	pip3 install pymysql
-------------------------------

最基本代码:
import pymysql
# host='127.0.0.1' 服务端的ip地址  3306端口  自报家门账户与密码后
# 再指定要操作的库  指定编码


# 1.连接MySQL服务端
conn = pymysql.connect(
    host='127.0.0.1',
    port=3306,
    user='root',
    password='123',
    db='db4_03',
    charset='utf8mb4'
)


# 2.产生游标对象      cursorn 光标;[计] 游标,指针
# cursor = conn.cursor()  # 括号内不填写额外参数,fetchall()的结果数据是一个一个元组 指定性不强  [(),(),()]  不知道每个元组里面的数据是哪个字段下的数据,不方便!!!

cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)  # [{},{}]


# 3.编写SQL语句
sql = 'select * from score;'


# 4.发送SQL语句,并执行SQL语句
affect_rows = cursor.execute(sql)
# execute也有返回值 接收的是SQL语句影响的行数

print(affect_rows)   # 如果不需要返回值结果,可以不接收返回值



# 5.获取SQL语句执行之后的结果
res = cursor.fetchall()
print(res)

image
.
. 括号内不填写额外参数,fetchall()的结果数据是一个一个元组 指定性不强 [(),(),()] 不知道每个元组里面的数据是哪个字段下的数据,不方便!!!
image
.
.fetchall()的结果数据以字典的形式展示,键就是字段名,值就是数据
image
.
.
.
.
.
.

pymysql补充说明

1.获取数据
fetchall()
获取所有的结果 类似于文件光标的概念,执行完一次,再执行fetchall()就获取不到结果了!!!

fetchone()            获取结果集的第一条数据

fetchmany()           获取指定条数的结果集

ps:注意三者都有类似于文件光标移动的特性
------------------------------------------------------
控制光标移动:
cursor.scroll(1,'relative')  # 基于当前位置往后移动一位,一条数据就算移动一位
cursor.scroll(0,'absolute')  # 基于数据的开头往后移动
------------------------------------------------------


# 2.增删改查
默认情况看用python是不能对数据库进行增删改的操作的,只有查看数据的权利!!!
如果想要对数据库进行增删改的操作,必须要二次确认!!!


# 方法一:
需要在原来基础代码的最下面再写一行代码!!!
conn.commit()  # 针对 增 删 改 需要二次确认(代码确认)


-------------------------------------------
# 方法二:
也可以在原来基础代码的第一行,
连接MySQL服务端代码conn = pymysql.connect()的括号里面再加一行配置

conn = pymysql.connect(
    host='127.0.0.1',
    port=3306,
    user='root',
    password='123',
    db='db4_03',
    charset='utf8mb4'
    autocommit=True
)

# autocommit=True 加了它针对增 删 改 自动确认  就不用手动确认了

---------------------------

image
.
.
.
.

批量插入数据


import pymysql
list_1 = [('a',1),('b',2),(None,3)]  # 元素是不是元组都可以
sql_1 = 'insert into 表明(字段1,字段2) values(%s,%s)'
# 注意,这里的%s不需要加引号,使用execute需要加引号。
# 另外,executemany 在执行过程中能够将python的None转为sql的null,
# 这一点挺方便的

db = pymysql.connect(host= ....)
cursor = db.cursor()
cursor.executemany(sql_1,list_1)
db.commit()
cursor.close()
db.close()
print('完成')


.
.
.
.
.
.

sql语句中涉及到字符串拼接的一律用占位符,然后让excute来帮你拼接


# 尤其是修改新增修改操作,就算你把字符串拼好了,也可能执行的时候出问题!!!

import pymysql

def record_task_name(inspection_type, car=None):
    conn = pymysql.connect(user='root', password='root123', host='192.168.11.99', database='test', port=3306)
    cursor = conn.cursor(pymysql.cursors.DictCursor)  # 生成游标对象

    # 拼接字符串一律不推荐!!!
    sql1 = "SELECT train_name FROM train WHERE train_id = {};".format(2)
    print(sql1)
    cursor.execute(sql1)
    res1 = cursor.fetchone()
    print(res1)  # {'train_name': 'hahaha'}
    train_name = 'ceshi'

    if car:
        task_name = '123' + '股道' + 'abc' + '段' + car + '车厢' + ' | 列车888' + train_name + inspection_type
    else:
        task_name = '123' + '股道' + 'abc' + '段' + '列车7777' + train_name + inspection_type
    print(task_name)

    sql2 = "update task set task_name = %s where task_id = %s;"

    cursor.execute(sql2, (task_name, 1))
    conn.commit()
    print(sql2)


record_task_name('全检', 'car111')

.
.
.
.
.
.

使用pymysql注意事项!!!!


# 项目中使用 pymysql 最好这样用,把生成游标的代码放到with里面去
# 这样执行完,就自动关掉conn连接对象了
# 不然,项目运行过程中,会报一些连接有问题,超时啥的错!!!!

conn = pymysql.connect(user='root', password='222', host='127.0.0.1', database='20230113bbs', port=3306)

try:
    with conn.cursor(pymysql.cursors.DictCursor) as cursor:
        sql = "SELECT * FROM base_users WHERE username = %s"
        cursor.execute(sql, (username,))
        user = cursor.fetchone()
        if user:
            if user['password'] == md5_password:
                session['username'] = username
                return redirect(url_for('upload_file'))
            else:
                return '密码错误'
        else:
            return '用户不存在'
finally:
    conn.close()

.
.
.

posted @   tengyifan  阅读(19)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
点击右上角即可分享
微信分享提示