Python 第三方模块之 MySQL数据库连接模块 PyMySQL

PyMySQL的安装

pip install PyMySQL

python连接数据库

import pymysqlconn = pymysql.connect(host='localhost', user='root', password="root",database='db', port=3306,        # 数字3306charset='utf8',   # 不是utf-8autocommit=True   # autocommit=True 让每次提交都去调用 commit 函数 即更新事务
)                                                      # 连接数据库,
cursor= conn.cursor(cursor=pymysql.cursors.DictCursor) # cursor=pymysql.cursors.DictCursor 表示返回结果以字典形式返回(不加为元祖形式)
cursor.execute("SELECT VERSION()")                     # 使用 execute() 方法执行 SQL 查询
data = cursor.fetchone()                               # 使用 fetchone() 方法获取单条数据
print ("Database version : %s " % data)
db.close()                                             # 关闭数据库连接

创建表

import pymysqldb = pymysql.connect("localhost","testuser","test123","TESTDB" )
cursor = db.cursor()# 使用 execute() 方法执行 SQL,如果表存在则删除
cursor.execute("DROP TABLE IF EXISTS EMPLOYEE")# 使用预处理语句创建表
sql = """CREATE TABLE EMPLOYEE (FIRST_NAME  CHAR(20) NOT NULL,LAST_NAME  CHAR(20),AGE INT,  SEX CHAR(1),INCOME FLOAT )"""cursor.execute(sql)
db.close()

import pymysqldb = pymysql.connect("localhost","testuser","test123","TESTDB" )
cursor = db.cursor()# SQL 插入语句
sql = "INSERT INTO EMPLOYEE(FIRST_NAME, LAST_NAME, AGE, SEX, INCOME)  VALUES (%s, %s,  %s,  %s,  %s )" % ('Mac', 'Mohan', 20, 'M', 2000)
try:cursor.execute(sql)      # 执行sql语句print(cursor.lastrowid)  # 最后插入行的主键id,在 conn.commit() 之前执行print(db.insert_id())    # 最新插入行的主键id,在 conn.commit() 之前执行db.commit()              # 提交到数据库执行
except:db.rollback()         # 如果发生错误则回滚db.close()# 最好不要自己拼接sql语句,会有sql注入的漏洞,使用execute(sql,参数)的方式可以防止
sql = "INSERT INTO EMPLOYEE(FIRST_NAME, LAST_NAME, AGE, SEX, INCOME) VALUES (%s, %s,  %s,  %s,  %s )"
cursor.execute(sql,('Mac', 'Mohan', 20, 'M', 2000))    # 执行sql语句

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

  • fetchone(): 该方法获取下一个查询结果集。结果集是一个对象
  • fetchall(): 接收全部的返回结果行.
  • rowcount: 这是一个只读属性,并返回执行execute()方法后影响的行数。
import pymysqldb = pymysql.connect("localhost","testuser","test123","TESTDB" )
cursor = db.cursor()sql = "SELECT * FROM EMPLOYEE WHERE INCOME > %s" % (1000)
try:cursor.execute(sql)          # 执行SQL语句results = cursor.fetchall()  # 获取所有记录列表for row in results:fname = row[0]lname = row[1]age = row[2]sex = row[3]income = row[4]print ("fname=%s,lname=%s,age=%s,sex=%s,income=%s" % (fname, lname, age, sex, income ))
except:print ("Error: unable to fetch data")db.close()

import pymysqldb = pymysql.connect("localhost","testuser","test123","TESTDB" )
cursor = db.cursor()sql = "UPDATE EMPLOYEE SET AGE = AGE + 1 WHERE SEX = '%c'" % ('M')
try:cursor.execute(sql)  # 执行SQL语句db.commit()          # 提交到数据库执行
exceptdb.rollback()        # 发生错误时回滚db.close()

import pymysqldb = pymysql.connect("localhost","testuser","test123","TESTDB" ) 
cursor = db.cursor()sql = "DELETE FROM EMPLOYEE WHERE AGE > %s" % (20)
trycursor.execute(sql)  # 执行SQL语句db.commit()          # 提交修改
exceptdb.rollback()        # 发生错误时回滚
db.close()

解决问题

pymysql.err.InterfaceError: (0, '')

原因:因为这个数据库的连接建立太久了,会自动断开,这个时候我们需要重新建立连接,否则访问接口就会出现异常报错了。

解决办法:我们可以在每次操作SQL之前对连接进行检查,如果发现连接已经断开,则进行重连。在源码中,如果使用了方法 ping(reconnect=True) ,那么可以在每次连接之前,会检查当前连接是否已关闭,如果连接关闭则会重新进行连接,于是我们可以将其用于处理目前报错的问题,改动后的代码如下

class MYBMYSLQ(object):def __init__(self):self.conn = pymysql.connect("localhost","testuser","test123","TESTDB" ) self.cursor = self.conn.cursor(cursor=pymysql.cursors.DictCursor)def cmdb_select(self, sql, sql_arg=()):self.conn.ping(reconnect=True)self.cursor.execute(sql, sql_arg)return self.cursor.fetchall()

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

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

相关文章

初学Spring Boot

1.Spring Boot注解 (1)SpringBootApplication开启了Spring的组件扫描和Spring Boot的自动配置,实际上,SpringBootApplication是将三个注解组合在了一起,这三个注解分别是 SpringBootConfiguration,ComponentScan,Ena…

15条常用的视频音频编辑脚本命令(mencoder/ffmpeg等)

可以把它当快速简易参考看,主要的功能有: 视频格式转换音频格式转换切割视频及音频连接两段视频视频音频同步将图像系列转换成视频 这里是百鬼丸以前收集的一部分命令行视频音频编辑脚本命令,一直在自己的记事本里随时用,现在…

python rowcount_PyQt(Python+Qt)学习随笔:QTableWidget的currentItem、rowCount、columnCount等部件状态属性访问方法...

老猿将QTableWidget表格部件中反映部件当前情况的一些方法归类为部件状态访问方法,包括部件的行数、列数、当前项、当前行、当前列等属性访问方法。1、行数rowCountQTableWidget的rowCount属性保存表格部件中的行数,在QTableWidget创建时如果没有指定行数…

Python 内置模块之 random

常用API import random# 随机小数 print(random.random()) # 大于0且小于1之间的小数。0< n<1.0 print(random.uniform(1,3)) # 大于1小于3的小数# 随机整数 print(random.randint(1,5)) # 大于等于1且小于等于5之间的整数#从指定范围内&#xff0c;按指定基…

微信jssdk遇到的一些问题汇总

1.用户手动去触发的接口可以直接调用比如wx.startRecord(); 但是写在页面加载完成里就无效&#xff0c;需要写在 wx.ready(function(){wx.startRecord(); }); 才会有效。 2.h5 的audio标签只支持ogg,mp3,wav格式的音频&#xff0c;微信jssdk录制的是amr格式的语音文件&#xf…

mongodb简单的增删改查

数据库操作&#xff1a; show dbs;#查看数据库use test;#如果没有就创建一个db;#查看当前数据库db.dropDatabase();#删除数据库 数据操作&#xff1a;show collections&#xff1b;#查看集合创建集合、插入&#xff1a;create collection;#创建集合db.student.insert({"na…

ffmpeg-0.8 开源编码解码库从linux下移植到windows vs2005

最新 ffmpeg-0.8 开源编码解码库&#xff0c;从linux下移植到windows vs2005&#xff0c;全部开源。需要 Intel C Compile 和 开源的SDL库支持&#xff0c;由于 Intel C Compile支持C99语法&#xff0c;所以源代码改动很小很小。主要的修改1&#xff1a;添加了linux中有而windo…

python3.5.2使用教程_Python3.5.2-初级教程.docx

Python3.5.2-初级教程Python 初级教程Release:3.5.2引言Python 是一门简单易学且功能强大的编程语言。它拥有高效的高级数据结构&#xff0c;并且能够用简单而又高效的方式进行面向对象编程。Python 优雅的语法和动态类型&#xff0c;再结合它的解释性&#xff0c;使其在大多数…

Flask 离线脚本

1. 在 __init__.py中创建db对象from flask_sqlalchemy import SQLAlchemy# 包含了SQLAlchemy相关的所有操作db SQLAlchemy()2. 在 __init__.py中create_app函数中让将app传入到db中def create_app():app Flask(__name__)app.config.from_object(settings.DevelopmentConfig)f…

day13 迭代器和生成器

一、上节回顾和作业讲解&#xff1a; 1、如果这个网页没有被爬取过就真的去访问这个网页&#xff0c;否则就返回之前访问的时候缓存文件中的内容 &#xff08;重要的例子&#xff09; from urllib.request import urlopen def wrapper(func):def inner(*args, **kwargs):with o…

Centos7.0 搭建Zabbix环境

实验环境&#xff1a;Centos7.0IP:192.168.47.140关闭iptables及setenforce导入源 rpm -ivh http://repo.zabbix.com/zabbix/3.0/rhel/7/x86_64/zabbix-release-3.0-1.el7.noarch.rpm安装zabbix包安装完成安装mysql源wget http://repo.mysql.com/mysql-community-release-el7-5…

用线性插值算法实现图像缩放

用线性插值算法实现图像缩放 猛禽[Mental Studio](个人专栏)(BLOG) http://mental.mentsu.com 在Windows中做过图像方面程序的人应该都知道Windows的GDI有一个API函数&#xff1a;StretchBlt&#xff0c;对应在VCL中是TCanvas类的StretchDraw方法。它可以很简单地实现图像的缩放…

蒙特卡洛分析 pmp_PMP基础名词介绍 | 59. 实施定量风险分析

点击上方蓝字关注我们你好&#xff0c;这是“兔子研习社”为管理新手推出的“PMP基础名词介绍”系列内容。如果你正打算转到管理岗位&#xff0c;或者想要学习国际通行的项目管理知识&#xff0c;那恭喜你&#xff0c;这里满满的干货会让你不虚此行。实施定量风险分析是就已识别…

深度学习案例之基于 CNN 的 MNIST 手写数字识别

一、模型结构 本文只涉及利用Tensorflow实现CNN的手写数字识别,CNN的内容请参考:卷积神经网络(CNN) MNIST数据集的格式与数据预处理代码input_data.py的讲解请参考 :Tutorial (2) 二、实验代码 # -*- coding:utf-8 -*- """Time : Author: Feng LepengFile …

怎样获取linux命令帮助?

获得命令使用帮助&#xff1a;内部命令&#xff1a;help COMMAND外部命令&#xff1a;COMMAND --help &#xff08;大多数命令有help选项&#xff09;命令手册&#xff1a;manualman [章节号] COMMAND其中man数据库是分章节的&#xff0c;相同的COMMAND出现在不同的章节表示…

编译安装 zbar 时两次 make 带来的惊喜

为了装 php 的条形码扩展模块 php-zbarcode&#xff0c;先装了一天的 ImageMagick 和 zbar。也许和我装的 Ubuntu 17.10 的有版本兼容问题吧&#xff0c;总之什么毛病都有&#xff0c;apt 不行&#xff0c;PPA 源也不行&#xff0c;编译安装还有几处源代码出错&#xff0c;装不…

python数组的乘法_在Python中乘法非常大的2D数组

我必须在Python中将非常大的2D数组乘以大约100次.每个矩阵由3200032000元素组成.我正在使用np.dot(X,Y),但是每次乘法都需要很长时间…在我的代码实例下面&#xff1a;import numpy as npX Nonefor i in range(100)multiplying Trueif X None:X generate_large_2darray()mu…

0阶指数哥伦布编码

指数哥伦布编码 规定语法元素的编解码模式的描述符如下&#xff1a; 比特串&#xff1a; b(8):任意形式的8比特字节&#xff08;就是为了说明语法元素是为8个比特&#xff0c;没有语法上的含义&#xff09; f(n):n位固定模式比特串&#xff08;其值固定&#xff0c;如forbidde…

TensorFolw 报错

1、报错1&#xff1a;ValueError: Only call softmax_cross_entropy_with_logits with named arguments (labels..., logits..., ...) 提示出错如下&#xff1a; Traceback (most recent call last):File "/MNIST/softmax.py", line 12, in <module>cross_en…

CentOS7种搭建FTP服务器

安装vsftpd 首先要查看你是否安装vsftp [rootlocalhost /]# rpm -q vsftpd vsftpd-3.0.2-10.el7.x86_64 #显示也就安装成功了&#xff01; 如果没有则安装vsftpd [rootlocalhost/]# yum install -y vsftpd 完成后再检查一遍 [rootlocalhost /]# whereis vsftpd vsf…