Python3.5(ANCONDA3)连接MYSQL数据库

2023-10-27

Python3和Python2连接MYSQL数据库稍微不同,我们这里要使用PyMySQL。

 

什么是 PyMySQL?

PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库,Python2中则使用mysqldb。

PyMySQL 遵循 Python 数据库 API v2.0 规范,并包含了 pure-Python MySQL 客户端库。

 

PyMySQL 安装

在使用 PyMySQL 之前,我们需要确保 PyMySQL 已安装。

PyMySQL 下载地址:https://github.com/PyMySQL/PyMySQL。

如果还未安装,我们可以使用以下命令安装最新版的 PyMySQL

pip install PyMySQL (LINUX WINDOWS都可以用)

如果你不能使用pip,你可以使用以下的方式:(LINUX)

1、使用 git 命令下载安装包安装(你也可以手动下载):

# git clone https://github.com/PyMySQL/PyMySQL
# cd PyMySQL/
# python setup.py install

2、如果需要制定版本号,可以使用 curl 命令来安装:

# X.X 为 PyMySQL 的版本号
# curl -L https://github.com/PyMySQL/PyMySQL/tarball/pymysql-X.X | tar xz
# cd PyMySQL*
# python setup.py install
# 现在你可以删除 PyMySQL* 目录

如果你在安装的过程中可能会出现"ImportError: No module named setuptools"的错误提示,意思是你没有安装setuptools,你可以访问https://pypi.python.org/pypi/setuptools 找到各个系统的安装方法。

# wget https://bootstrap.pypa.io/ez_setup.py
# python3 ez_setup.py

数据库连接

连接数据库前,请先确认以下事项:

  • 您已经创建了数据库 TESTDB.
  • 在TESTDB数据库中您已经创建了表 TEST
  • EMPLOYEE表字段为 ID, NAME, AGE, SEX 和 S_LOCAL。
  • 连接数据库TESTDB使用的用户名为 "root" ,密码为 "root",你也可以使用自己设定的用户名及其密码,Mysql数据库用户授权请使用Grant命令。
  • 在你的计算机上已经安装了 Python MySQLdb 模块。
  • 如果您对sql语句不熟悉,建议你还是先去看看数据库SQL基础教程吧!!!
  • 我的数据库在LINUX的虚拟机上地址是192.168.115.128 端口是3306 版本是MYSQL-5.6.25-x86_64

数据库建库语句:

CREATE DATABASE TESTDB;

使用刚刚建立的数据库:

USE TESTDB;

建表语句: 

CREATE TABLE TEST (ID INT,NAME VARCHAR(100),AGE INT,SEX CHAR(1),S_LOCAL VARCHAR(100)) CHARSET=UTF8;

查看一下表:

SHOW TABLES;

查看一下表结构:

DESC TEST;

编程实例:

查看数据库版本:

(均是在WINDOWS 7 PYCHARM 2018.2.2PRO版下开发)

以下实例链接 Mysql 的 TESTDB 数据库:

代码如下:

#encoding=utf-8
import pymysql

# 打开数据库连接
db = pymysql.connect("192.168.115.128", "root", "root", "TESTDB")

# 使用 cursor() 方法创建一个游标对象 cursor
cursor = db.cursor()

# 使用 execute()  方法执行 SQL 查询 
cursor.execute("SELECT VERSION()")

# 使用 fetchone() 方法获取单条数据.
data = cursor.fetchone()

print("Database version : %s " % data)

# 关闭数据库连接
db.close()

执行程序:

结果出来了!!!

创建数据库表:

代码如下:

import pymysql

# 打开数据库连接
db = pymysql.connect("192.168.115.128", "root", "root", "TESTDB")

# 使用 cursor() 方法创建一个游标对象 cursor
cursor = db.cursor()

# 使用 execute() 方法执行 SQL,如果表存在则删除
cursor.execute("DROP TABLE IF EXISTS TEST2")

# 使用预处理语句创建表
sql = """CREATE TABLE TEST2 (
         ID INT ,
         NAME  VARCHAR(20),
         AGE INT,  
         SEX CHAR(1),
         S_LOCAL VARCHAR(100))"""

cursor.execute(sql)

# 关闭数据库连接
db.close()

数据库里查看结果,看是否表建立成功:

查看表结构:

看我们又成功了!!!

数据库插入操作

代码如下:

import pymysql

# 打开数据库连接
db = pymysql.connect("192.168.115.128", "root", "root", "TESTDB")

# 使用 cursor() 方法创建一个游标对象 cursor
cursor = db.cursor()

# SQL 插入语句
sql = """INSERT INTO TEST(ID,
         NAME, AGE, SEX, S_LOCAL)
         VALUES (1, '张三丰', 100, 'M', '武当山')"""
try:
    # 执行sql语句
    cursor.execute(sql)
    # 提交到数据库执行
    db.commit()
except:
    # 如果发生错误则回滚
    db.rollback()

# 关闭数据库连接
db.close()

查看结果:

 

数据库查询操作

Python查询Mysql使用 fetchone() 方法获取单条数据, 使用fetchall() 方法获取多条数据。

  • fetchone(): 该方法获取下一个查询结果集。结果集是一个对象
  • fetchall(): 接收全部的返回结果行.
  • rowcount: 这是一个只读属性,并返回执行execute()方法后影响的行数

代码如下:

import pymysql

# 打开数据库连接
db = pymysql.connect("192.168.115.128", "root", "root", "TESTDB")

# 使用 cursor() 方法创建一个游标对象 cursor
cursor = db.cursor()

# SQL 查询语句
sql = "SELECT * FROM  TEST"
try:
    # 执行SQL语句
    cursor.execute(sql)
    # 获取所有记录列表
    results = cursor.fetchall()
    for row in results:
        ID = row[0]
        NAME = row[1]
        AGE = row[2]
        SEX = row[3]
        S_LOCAL = row[4]
        # 打印结果
        print("ID=%s,NAME=%s,AGE=%s,SEX=%s,S_LOCAL=%s" % (ID, NAME, AGE, SEX, S_LOCAL))
except:
    print("Error: unable to fetch data")

# 关闭数据库连接
db.close()

查看结果:

又成功了!

执行事务

事务机制可以确保数据一致性。

事务应该具有4个属性:原子性、一致性、隔离性、持久性。这四个属性通常称为ACID特性。

  • 原子性(atomicity)。一个事务是一个不可分割的工作单位,事务中包括的诸操作要么都做,要么都不做。
  • 一致性(consistency)。事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。
  • 隔离性(isolation)。一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。
  • 持久性(durability)。持续性也称永久性(permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。

Python DB API 2.0 的事务提供了两个方法 commit 或 rollback。

上面的INSERT语句中已经包含了事务处理方式,请大家查看插入操作的源代码!!!

思考题!因为UPDATE和DELETE与INSERT同属DML操作,请根据INSERT语句示例自己尝试编写一下UPDATE和DELETE语句,语法不会请参考数据库SQL标准教程。

 

错误处理

DB API中定义了一些数据库操作的错误及异常,下表列出了这些错误和异常:

异常 描述
Warning 当有严重警告时触发,例如插入数据是被截断等等。必须是 StandardError 的子类。
Error 警告以外所有其他错误类。必须是 StandardError 的子类。
InterfaceError 当有数据库接口模块本身的错误(而不是数据库的错误)发生时触发。 必须是Error的子类。
DatabaseError 和数据库有关的错误发生时触发。 必须是Error的子类。
DataError 当有数据处理时的错误发生时触发,例如:除零错误,数据超范围等等。 必须是DatabaseError的子类。
OperationalError 指非用户控制的,而是操作数据库时发生的错误。例如:连接意外断开、 数据库名未找到、事务处理失败、内存分配错误等等操作数据库是发生的错误。 必须是DatabaseError的子类。
IntegrityError 完整性相关的错误,例如外键检查失败等。必须是DatabaseError子类。
InternalError 数据库的内部错误,例如游标(cursor)失效了、事务同步失败等等。 必须是DatabaseError子类。
ProgrammingError 程序错误,例如数据表(table)没找到或已存在、SQL语句语法错误、 参数数量错误等等。必须是DatabaseError的子类。
NotSupportedError 不支持错误,指使用了数据库不支持的函数或API等。例如在连接对象上 使用.rollback()函数,然而数据库并不支持事务或者事务已关闭。 必须是DatabaseError的子类。

 

以上就是Python和MySQL数据库连接的基本操作,希望大家喜欢!!!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python3.5(ANCONDA3)连接MYSQL数据库 的相关文章

  • 如何避免使用 python 处理空的标准输入?

    The sys stdin readline 返回之前等待 EOF 或新行 所以如果我有控制台输入 readline 等待用户输入 相反 我想打印帮助并在没有需要处理的情况下退出并显示错误 而不是等待用户输入 原因 我正在寻找一个Pytho
  • Python 切片对象和 __getitem__

    python 中是否有内部的东西来处理传递给的参数 getitem 不同 并自动转换start stop step构造成切片 这是我的意思的演示 class ExampleClass object def getitem self args
  • 如何使用 Python 3 绕过 HTTP Error 403: Forbidden with urllib.request

    您好 不是每次都这样 但有时在尝试访问 LSE 代码时 我会收到每一个烦人的 HTTP 错误 403 禁止消息 任何人都知道我如何仅使用标准 python 模块来克服这个问题 遗憾的是没有漂亮的汤 import urllib request
  • 此 TypeError 消息中提到的“代码对象”是什么?

    在尝试使用Python时exec声明 我收到以下错误 TypeError exec arg 1 must be a string file or code object 我不想传递字符串或文件 但什么是代码对象 如何创建一个 创建代码对象的
  • 从文本文件中删除特定字符

    我对 Python 和编码都很陌生 我当时正在做一个小项目 但遇到了一个问题 44 1 6 23 2 7 49 2 3 53 2 1 68 1 6 71 2 7 我只需要从每行中删除第三个和第六个字符 或者更具体地说 从整个文件中删除 字符
  • 多处理中的动态池大小?

    有没有办法动态调整multiprocessing Pool尺寸 我正在编写一个简单的服务器进程 它会产生工作人员来处理新任务 使用multiprocessing Process对于这种情况可能更适合 因为工作人员的数量不应该是固定的 但我需
  • 如何过滤 Pandas GroupBy 对象并获取 GroupBy 对象?

    当对 Pandas groupby 操作的结果执行过滤时 它返回一个数据帧 但假设我想执行进一步的分组计算 我必须再次调用 groupby 这似乎有点绕 有更惯用的方法吗 EDIT 为了说明我在说什么 我们无耻地从 Pandas 文档中窃取
  • 创建上下文后将 jar 文件添加到 pyspark

    我正在笔记本上使用 pyspark 并且不处理 SparkSession 的创建 我需要加载一个包含一些我想在处理 rdd 时使用的函数的 jar 您可以使用 jars 轻松完成此操作 但在我的特定情况下我无法做到这一点 有没有办法访问sp
  • 在 python pandas 中,如何保存“网格图”?

    我对 pandas 绘图工具很陌生 在文档中 以下命令非常方便 myplot rts ret hist bins 50 by rts primary mic 然而 当我尝试从图中获取图形参考并保存它时 问题就出现了 myfigure myp
  • 在Python上获取字典的前x个元素

    我是Python的新手 所以我尝试用Python获取字典的前50个元素 我有一本字典 它按值降序排列 k 0 l 0 for k in len dict d l 1 if l lt 51 print dict 举个小例子 dict d m
  • AttributeError:“模块”对象没有属性[重复]

    这个问题在这里已经有答案了 我有两个 python 模块 a py import b def hello print hello print a py print hello print b hi b py import a def hi
  • Python HMAC:类型错误:字符映射必须返回整数、None 或 unicode

    我在使用 HMAC 时遇到了一个小问题 运行这段代码时 signature hmac new key secret key msg string to sign digestmod sha1 我收到一个奇怪的错误 File usr loca
  • Python将文本文件解析为嵌套字典

    考虑以下数据结构 HEADER1 key value key value HEADER2 key value key value HEADER3 key value HEADER4 key value key value 原始数据中没有缩进
  • Airflow 1.9 - 无法将日志写入 s3

    我在 aws 的 kubernetes 中运行气流 1 9 我希望将日志发送到 s3 因为气流容器本身的寿命并不长 我已经阅读了描述该过程的各种线程和文档 但我仍然无法让它工作 首先是一个测试 向我证明 s3 配置和权限是有效的 这是在我们
  • 在骨架图像中查找线 OpenCV python

    我有以下图片 我想找到一些线来进行一些计算 平均长度等 我尝试使用HoughLinesP 但它找不到线 我能怎么做 这是我的代码 sk skeleton mask rows cols sk shape imgOut np zeros row
  • 使用 Python 将连续日期分组在一起

    Given dates datetime 2014 10 11 datetime 2014 10 1 datetime 2014 10 2 datetime 2014 10 3 datetime 2014 10 5 datetime 201
  • 如何在亚马逊 EC2 上调试 python 网站?

    我是网络开发新手 这可能是一个愚蠢的问题 但我找不到可以帮助我的确切答案或教程 我工作的公司的网站 用 python django 构建 托管在亚马逊 EC2 上 我想知道从哪里开始调试这个生产站点并检查存储在那里的日志和数据库 我有帐户信
  • minizinc python 安装

    我通过 anaconda 提示符在 python 上安装了 minizinc 就像其他软件包一样 pip install minizinc 该软件包表示已成功安装 我可以导入该模块 但是 我正在遵循基本示例https minizinc py
  • python从二进制文件中读取16字节长的双精度值

    我找到了蟒蛇struct unpack 读取其他程序生成的二进制数据非常方便 问题 如何阅读16 字节长双精度数出二进制文件 以下 C 代码将 1 01 写入二进制文件三次 分别使用 4 字节浮点型 8 字节双精度型和 16 字节长双精度型
  • 如何(安全)将 Python 对象发送到我的 Flask API?

    我目前正在尝试构建一个 Flask Web API 它能够在 POST 请求中接收 python 对象 我使用 Python 3 7 1 创建请求 使用 Python 2 7 运行 API 该 API 设置为在我的本地计算机上运行 我试图发

随机推荐

  • Java阿里巴巴代码规范

    目录 1 编程规约 1 1 方法参数类型必须一致 不要出现自动装箱拆箱操作 1 1 1 反例 1 1 2 正例 1 2 SimpleDateFormat是线程不安全的 1 2 1 反例 1 2 2 正例 1 3 使用equals方法应该注意
  • 软件项目管理(第二版 宁涛)问答题(个人背诵)

    目录 第一章 概述 1 什么是软件项目管理 2 项目管理的 9 大知识领域是什么 3 项目管理的 5 个过程组是什么 5 项目经理的主要职责是什么 6 项目的特点是什么 7 项目和运营的共同点有哪些 8 项目集成管理是什么 9 规划过程组的
  • Flutter学习 — 从新页面返回数据给上一个页面

    效果图一 点击按钮 效果图二 点击YES后 返回上一级页面并传值 效果图三 收到值 并用底部弹出框显示结果 注释 代码 import package flutter material dart void main runApp new Ma
  • 关于Git的一点思考

    GIT历史 很多人都知道 Linus在1991年创建了开源的Linux 从此 Linux系统不断发展 已经成为最大的服务器系统软件了 Linus虽然创建了Linux 但Linux的壮大是靠全世界热心的志愿者参与的 这么多人在世界各地为Lin
  • YOLOV5之TensorRT模型部署

    目录 一 环境版本 1 1 概述 1 2 Ubuntu版本 1 3 python pytorch与tensorrt版本 1 4 cudnn版本 1 5 驱动版本 1 6 opencv版本 二 TensorRT与opencv环境安装 2 1
  • 虚拟化概念详解

    虚拟化的定义 虚拟化技术可以认为是一种对物理资源抽象化 进而形成虚拟化的版本的技术 虚拟化的目的 物理资源组成庞大的资源池 然后可以按需分配 随意切割物理资源 虚拟化资源分类 服务器虚拟化 服务器虚拟化就是将虚拟化技术应用于服务器 将一台服
  • 【STM32标准库】【基础知识】ADC转换,非DMA的单通道和多通道

    文章目录 ADC概述 ADC初始化 GPIO初始化 时钟 全局ADC设置 定义结构体 是否使用DMA 工作模式 分频 采样延迟 例程 单独ADC设置 定义结构体 连续转换 数据对齐 外部触发 通道数量 分辨率 扫描模式 例程 设置规则 打开
  • 【Git】(五)切换分支

    1 切换分支 git checkout newBranch 2 如果需要保留本地修改 git status git add git commit amend git checkout newBranch 3 强制切换分支 放弃本地修改 强制
  • vgg16-pytorch

    基于pytorch实现VGG16模型 刚听完土哥的入门pytorch 试着写一个不完善的vgg16 VGG16具体的架构 VGG16模型构建 卷积池化后尺寸计算公式 引入库 from torch import nn from torch n
  • 深入理解java虚拟机(十) Java 虚拟机运行时栈帧结构

    运行时栈帧结构 栈帧 Stack Frame 是用于虚拟机执行时方法调用和方法执行时的数据结构 它是虚拟栈数据区的组成元素 每一个方法从调用到方法返回都对应着一个栈帧入栈出栈的过程 每一个栈帧在编译程序代码的时候所需要多大的局部变量表 多深
  • <5>STM32库函文件分析-库函数

    使用STM32F10x的库函数文件编程就要对它的库文件有一个相对清晰的认识 即使不能做到知根知底 但当要使用到MCU的某个功能时 要知道相应的库函数在哪个对应的 h和 c 文件中 看懂并了解它的寄存器 下面我写一下我对其的认知 有错误的地方
  • SQLMAP工具 详细使用方法

    文章目录 SQLMAP简介 SQLMAP支持的注入模式 SQLMAP支持的数据库 SQLMAP安装 Linux Windows 更新 SQLMAP参数详解 使用 Options Target Reques Optimization Inje
  • UnityShader入门精要——透明物体阴影

    透明度测试 Shader Unity Shaders Book Chapter 9 Alpha Test With Shadow Properties Color Color Tint Color 1 1 1 1 MainTex Main
  • 2023最新软件测试面试题(带答案)

    1 请自我介绍一下 需简单清楚的表述自已的基本情况 在这过程中要展现出自信 对工作有激情 上进 好学 面试官您好 我叫 今年26岁 来自江西九江 就读专业是电子商务 毕业后就来深圳工作 有三年的软件测试工程师的经验 我性格比较开朗 能和同事
  • 单例模式-Golang实现

    目录 非线程安全的懒汉模式 线程安全的懒汉模式 使用sync Mutex 互斥锁实现 使用sync Once实现 饿汉模式 比较懒汉模式和饿汉模式 非线程安全的懒汉模式 main go package simple import fmt s
  • Uncaught TypeError:Cannot read property ‘apply‘ of undefined

    报错信息 这是执行了删除功能之后就变成这样了 前端页面显示 一直是读取中状态 报错原因 本来是想做一个状态的效果 选中数据时 删除按钮才可用状态 在前端controller类里面调用了以下方法 忘记去写具体方法了 所以就出现了上面的问题 解
  • ES6 - lterator

    1 迭代器 内部迭代器和外部迭代器 迭代模式 提供一种方法顺序获得集合对象中的各个元素 是一种最简单也是最常见的设计模式 提供特定的接口 内部迭代器 本身是函数 定义好内部迭代规则 外部只需一次初始调用 例如 Array prototypr
  • 一篇关于运放自激振荡的帖子

    在负反馈电路时 反馈系数F越小越可能不产生自激震荡 换句话说 F越大 产生自激震荡的可能性越大 对于电阻反馈网络 F的最大值是1 F 1的典型电路就是电压跟随电路 这就是电压跟随运放易震荡原因 这也是我们常常会看到运放手册标有单位增益稳定说
  • Python 下中文分词算法的简单示例

    代码如下 import jieba 需要先安装jieba库 text Python中文分词是一个很好用的工具 在自然语言处理领域得到了广泛应用 待分词的文本 使用jieba进行分词 cut方法返回一个生成器 遍历该生成器可以得到每个词语 s
  • Python3.5(ANCONDA3)连接MYSQL数据库

    Python3和Python2连接MYSQL数据库稍微不同 我们这里要使用PyMySQL 什么是 PyMySQL PyMySQL 是在 Python3 x 版本中用于连接 MySQL 服务器的一个库 Python2中则使用mysqldb P