数据库+Python----------Python操作MySQL

news2024/10/7 14:24:30

目录

1.在Python中安装pymysql

2.创建数据

1.连接数据库,创建一个数据库对象

2.开启游标功能,创建游标对象

3.发送指令

获取查询结果集的方法

4.实操

5.注意 

不可以!!!

正确写法

6.用户输入数据

3.查询数据 

4.增、删、改数据


1.在Python中安装pymysql

pip3.9 install pymysql

2.创建数据

参数描述
host可选。规定主机名或 IP 地址。
username可选。规定 MySQL 用户名。
password(passwd)可选。规定 MySQL 密码。
database(db)可选。规定默认使用的数据库。(所用的数据库名
port可选。规定尝试连接到 MySQL 服务器的端口号。
socket可选。规定 socket 或要使用的已命名 pipe。

1.连接数据库,创建一个数据库对象

conn=pymysql.connect(
    host="localhost",
    port=3306,
    user="root",
    db="case",
    passwd="cheng0214",
    charset="utf8"
)

2.开启游标功能,创建游标对象

  • 在使用pymysql.connect() 方法与数据库建立连接后,想要操作数据库时,就需要使用游标 Cursor通过连接好的数据库(此处为conn,该处的名称可自己决定)调用 cursor() 方法即可返回一个新的游标对象,在连接没有关闭之前,游标对象可以反复使用
# 这里使用的是数据库对象conn中的cursor()方法,
cursor = conn.cursor()
# 这个语句使用了pymysql库中的cursor方法来创建一个字典类型的游标对象。这个游标对象可以用来执行SQL查询,并将结果以字典的形式返回。
cursor = conn.cursor(cursor=pymysql.cursor.DictCursor)
  •  游标类型
类型描述
Cursor普通的游标对象,默认创建的游标对象
SSCursor不缓存游标,主要用于当操作需要返回大量数据的时候
DictCursor以字典的形式返回操作结果
SSDictCursor不缓存游标,将结果以字典的形式进行返回

3.发送指令

  • 调用 cursor.execute(sql) 方法查询数据

获取查询结果集的方法

Connection类提供了三个方法: begin 开始事务, commit 提交事务, rollback 回滚事务,如果通过 sql 语句对数据库中的数据进行了修改, 则需要提交事务。

db.commit()

这是一个Python中的数据库操作函数。它通常用于提交事务,将所有在事务内进行的修改永久保存到数据库中。在执行INSERT、DELETE、UPDATE等操作时,必须使用该函数才能使操作生效。如果不提交,所有的修改将不会被保存。

4.实操

import pymysql

# 1.连接MySQL (connect)连接
conn=pymysql.connect(
    host="localhost",
    port=3306,
    user="root",
    db="case",
    passwd="cheng0214",
    charset="utf8")
# 创建连接,创建游标(cursor),基于cursor发送指令,用游标execute执行sql语句,然后断开连接
cursor=conn.cursor(cursor=pymysql.cursors.DictCursor)

# 2.发送指令
# 只是生成了命令,没有提交
cursor.execute("insert into admin(username,password,mobile) value ('cheng','123','1507')")
# 所以需要commit提交一下,也可以在db=‘’后面加,autocommit=True 这样不写commit()也是可以的
conn.commit()

# 3.关闭
cursor.close()
conn.close()

5.注意 

不可以!!!

# 千万不要用字符串格式化去做SQL的拼接,安全隐患SQL注入
sql="insert into admin(username,password,mobile) value ('cheng','123','1507')"
cursor.execute(sql)
conn.commit()

正确写法

sql="insert into admin(username,password,mobile) value (%s,%s,%s)"
cursor.execute(sql,["cheng","123","1507"])
conn.commit()
sql="insert into admin(username,password,mobile) value (%(n1)s,%(n2)s,%(n3)s)"
cursor.execute(sql, {"n1":"cheng","n2":"123","n3":"1507"})
conn.commit()

6.用户输入数据

import pymysql

while True:
    user = input("用户名:")
    if user.upper()=='Q':
        break
    pwd = input("密码:")
    mobile = input("手机号:")

    # 1.连接MySQL (connect)连接
    conn = pymysql.connect(
        host="localhost",
        port=3306,
        user="root",
        db="case",
        passwd="cheng0214",
        charset="utf8")
    # 创建连接,创建游标(cursor),基于cursor发送指令,用游标execute执行sql语句,然后断开连接
    cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)

    # 2.发送指令
    # 只是生成了命令,没有提交
    sql = "insert into admin(username,password,mobile) value (%s,%s,%s)"
    cursor.execute(sql, [user,pwd,mobile])
    conn.commit()

    # 3.关闭
    cursor.close()
    conn.close()

user.upper():upper() 方法将字符串中的小写字母转为大写字母。

3.查询数据 

import pymysql

# 1.连接MySQL
conn = pymysql.connect(
    host="localhost",
    port=3306,
    user="root",
    db="case",
    passwd="cheng0214",
    charset="utf8")
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)

# 2.发送指令
sql = "select * from admin"
cursor.execute(sql)
data_list=cursor.fetchall()
print(data_list)

# 3.关闭
cursor.close()
conn.close()

print(data_list): 返回的是字典

for row_dict in data_list:
    print(row_dict)

  •   当调用 cursor.execute(sql) 方法查询数据的时候,如果执行成功,获取查询的结果集的方法有
名称说明
fetchall()返回剩下的所有行,如果走到末尾,就返回空元组,否则返回一个元组,其元素是每一行的记录封装的一个元组(得到的是:{字典,字典}或者空列表)
fetchone()获取结果集的下一行(得到的是:字典或者None)
fetchmany(size=None)size指定返回的行数,None则返回空元组
cursor.rownumber返回当前行号.可以修改,支持负数
cursor.rowcount返回的总行数

4.增、删、改数据

  • 在进行新增、删除、修改时,一定要记得commit,不然数据库么有数据。
sql = "..."
cursor.execute(sql)
conn.commit()
  •  在查询时,不需要commit,执行fetchall / fetchone
cursor.execute("...")
# 第一条数据,字典,无数据时是空列表
vl = cursor.fetchone()
# 所有数据,列表套字典,无数据时是None
vl = cursor.fetchall()
  • 对于SQL语句不要用Python的字符串格式化进行拼接(会被SQL注入),一定要用execute+参数
cursor.execute(".%s.......%s",["xx","xx"])

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/569210.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

设计模式之单例模式入门介绍

一、设计模式概念 设计模式是被广泛使用的软件开发中的一种解决方案,它提供了一套被验证过的、可重用的设计思想,帮助开发人员更加高效地开发出可维护、易扩展的软件系统。 设计模式可以分为三类:创建型模式、结构型模式和行为型模式。 1.1…

jsonschema fge json-schema-validator 高级能力 自定义类校验

入参校验产品化 schema_个人渣记录仅为自己搜索用的博客-CSDN博客 自定义的string format可以使用. 详见 fpe的 addFormatValidator ajv 的 addFormat能力 借鉴自chatgpt, 谷歌了半天,没看到好答案. Q: "jsonschema 自定义 object 校验" A: 如下 2014年后未更新…

使用 GNU 汇编语法编写 Hello World 程序的三种方法

本篇我们使用汇编来写一个经典的 Hello world 程序。 运行环境: OS:Ubuntu 18.04.5 LTS x86-64gcc:version 4.8.5 在用户空间编写汇编程序输出字符串,有三种方法: 调用C库函数 printf使用软中断 int 0x80使用 sysc…

Java的CookieManager

文章目录 1. 简介2. CookieStore 1. 简介 Java5包括一个抽象类Java.net.CookieHandler,它定义了存储和获取Cookie的一个API,但不包括这个抽象类的实现,所以还有很多工作要做。Java6进一步作了补充,为CookieManager增加了一个可以…

领导让我搭建Appium环境,还好我看到了这篇文章

首先介绍一下,Appium是一个APP的自动化框架,可用于测试APP、网页(web)、混合型应用,而且是跨平台(可以针对不同平台用一套api来编写测试用例)的。 pythonAppium自动化测试框架【项目实战合集】,轻松掌握app高级自动化测试_哔哩哔…

Redis 的数据类型和命令帮助

文章结构 Redis 数据类型1. Redis全局命令(跟key有关系,而跟value无关)2. StringsGetting and setting StringsManaging counters 3. Lists(L)Basic commandsBlocking commands 4. Sets(S)Basic commands 5. Hashes(H)Basic commands 6. Sort…

2.VirtualBox安装CentOS 7

安装VirtualBox 到https://www.virtualbox.org/wiki/Downloads下载并且安装,请选择对应系统的版本进行安装,我是Mac OS。一路Next。 下载CentOS虚拟镜像 到https://www.osboxes.org/centos/下载CentOS的虚拟镜像。我下载的是CentOS 7,64bi…

从零搭建微服务-认证中心(一)

写在最前 如果这个项目让你有所收获,记得 Star 关注哦,这对我是非常不错的鼓励与支持。 源码地址:https://gitee.com/csps/mingyue 文档地址:https://gitee.com/csps/mingyue/wikis 技术选型 本微服务将采用 Sa-Token 作为权限…

六级备考24天|CET-6|翻译技巧12|理解背诵|11:00~12:00+14:20~15:30

目录 一、翻译难点 二、评分标准​ 三、六级翻译之词汇 中国特色词汇 除夕 元宵节 上元节/灯节 年夜饭 团圆饭 大扫除/彻底打扫 不畏艰难 砥砺前行 四、六级翻译之语法 (一)定语从句 使用定语从句的前提 1. 带有动词的“的”结构 2. 相邻句子有名词重复 …

VMware重新安装VMwareTool字体为灰色情况+ubuntu时间设置

文章目录 前言:1. 重新安装VMwareTool字体为灰色2. VMware下ubuntu的时间设置 前言: 之前退出VMware关闭的时候没有等待虚拟机的状态保存,强制关机了。这就导致后面使用的时候,共享目录无法显示情况。对于上面的情况我的博客里面…

无毛刺时钟切换电路

为了SOC设计的低功耗性,多时钟域的划分是常用手段之一,有两个时钟,A为50Mhz,B为100Mhz,请设计无毛刺时钟切换电路,根据控制信号control,输出所需时钟信号。 control信号至少对一个时钟信号为异…

SpringCloud Sleuth+Zipkin

SpringCloud SleuthZipkin 官网 https://github.com/spring-cloud/spring-cloud-sleuth Sleuth/Zipkin 是什么? 概述(两张图) 在微服务框架中,一个由客户端发起的请求在后端系统中会经过多个不同的的服务节点调用, 来协同产生最后的请求结果&#x…

WhatsApp如何推动更多销售额

WhatsApp在全球拥有超过2亿用户,已成为最突出的通信应用程序。对于企业来说,这提供了一个有利可图的机会,可以大规模推广他们的产品和服务,而成本可能只是传统营销成本的一小部分。 如果您拥有电子商务业务,WhatsApp可…

《逆商》我们该如何应对坏事件

关于作者 作者保罗史托兹博士是逆商理论的提出者和奠基人,他曾被《人力资源》杂志评为 “全球十大有影响力的思想家”。在二十多年前提出逆商理论之后,他一直在致力于帮助各行各业的人士提高逆商,在实践中积累了该领域大量的数据和经验。 关…

典型环节的仿真实验(自控实验一)

实验目的 1)了解MATLAB Simulink的组成; 2)掌握线性系统Simulink仿真模型的建立方法; 3)通过典型环节阶跃响应的仿真,了解典型环节的动态特性; 4)了解MATLAB进行线性系统仿真的相…

2023新版Spring6全新讲解-核心内容之IoC

Spring核心之IoC 一、IoC概念介绍 1.IoC 介绍 IoC 是 Inversion of Control 的简写,译为“控制反转”,它不是一门技术,而是一种设计思想,是一个重要的面向对象编程法则,能够指导我们如何设计出松耦合、更优良的程序。…

如何获得铁粉?

铁粉是指那些非常喜欢某个人、品牌、产品或组织的人群,他们对所支持的对象非常忠诚,会在各种场合下宣传、支持和捍卫他们的偶像。铁粉通常会在社交媒体上关注他们的偶像、分享他们的内容、购买他们的产品或服务,并与其他铁粉互动和交流。他们…

JavaScript中的生成器函数(Generator Functions)

简介: 生成器函数(Generator Functions)是JavaScript中的一种特殊类型函数,它允许开发者在函数内部产生多个值并逐步返回,与传统函数一次返回单个值的方式不同。本文将介绍生成器函数的特性、优缺点以及如何使用它们&a…

【重新定义matlab强大系列十】函数normalize进行归一化数据

🔗 运行环境:Matlab 🚩 撰写作者:左手の明天 🥇 精选专栏:《python》 🔥 推荐专栏:《算法研究》 #### 防伪水印——左手の明天 #### 💗 大家好🤗&#x1f91…

2. css表格属性、文本属性、列表属性、边距属性、尺寸属性

1. 表格属性 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice-width…