python logging mysql_Python 操作 MySQL 的正确姿势

欢迎大家关注腾讯云技术社区-博客园官方主页,我们将持续在博客园为大家推荐技术精品文章哦~

作者:邵建永

使用Python进行MySQL的库主要有三个,Python-MySQL(更熟悉的名字可能是MySQLdb),PyMySQL和SQLAlchemy。

Python-MySQL资格最老,核心由C语言打造,接口精炼,性能最棒,缺点是环境依赖较多,安装复杂,近两年已停止更新,只支持Python2,不支持Python3。

PyMySQL为替代Python-MySQL而生,纯python打造,接口与Python-MySQL兼容,安装方便,支持Python3。

SQLAlchemy是一个ORM框架,它并不提供底层的数据库操作,而是要借助于MySQLdb、PyMySQL等第三方库来完成,目前SQLAlchemy在Web编程领域应用广泛。

本文主要介绍PyMySQL的正确使用方法,示例代码都是选自实战项目。

安装

简单的方式:

pip install pymysql

如果无法联网,需要进行离线安装,例如:

pip install pymysql-x.x.x.tar.gz

导入

import pymysql

连接

defconnect_wxremit_db():return pymysql.connect(host='10.123.5.28',

port=3306,

user='root',

password='root1234',

database='db_name',

charset='latin1')

查询

defquery_country_name(cc2):

sql_str= ("SELECT Fcountry_name_zh"

+ "FROM t_country_code"

+ "WHERE Fcountry_2code='%s'" %(cc2))

logging.info(sql_str)

con=mysql_api.connect_wxremit_db()

cur=con.cursor()

cur.execute(sql_str)

rows=cur.fetchall()

cur.close()

con.close()assert len(rows) == 1, 'Fatal error: country_code does not exists!'

return rows[0][0]

简单插入

definsert_file_rec(self, file_name, file_md5):

con=mysql_api.connect_wxremit_db()

cur=con.cursor()try:

sql_str= ("INSERT INTO t_forward_file (Ffile_name, Ffile_md5)",+ "VALUES ('%s', '%s')" %(file_name, file_md5))

cur.execute(sql_str)

con.commit()except:

con.rollback()

logging.exception('Insert operation error')raise

finally:

cur.close()

con.close()

批量插入

remit_ids = [('1234', 'CAD'), ('5678', 'HKD')]

con=mysql_api.connect_wxremit_db()

cur=con.cursor()try:

cur.executemany("INSERT INTO t_order (Fremit_id, Fcur_type, Fcreate_time"

+ "VALUES (%s, %s, now())", new_items)assert cur.rowcount == len(remit_ids), 'my error message'con.commit()exceptException as e:

con.rollback()

logging.exception('Insert operation error')finally:

cur.close()

con.close()

更新

defupdate_refund_trans(self, remit_id):

con=mysql_api.connect_wxremit_db()

cur=con.cursor()try:

sql_str= ("SELECT Fremit_id"

+ "FROM t_wxrefund_trans"

+ "WHERE Fremit_id='%s'" %remit_id+ "FOR UPDATE")

logging.info(sql_str)

cur.execute(sql_str)assert cur.rowcount == 1, 'Fatal error: The wx-refund record be deleted!'sql_str= ("UPDATE t_wxrefund_trans"

+ "SET Fcheck_amount_flag=1"

+ ", Fmodify_time=now()"

+ "WHERE Fremit_id='%s'" %remit_id

logging.info(sql_str)

cur.execute(sql_str)assert cur.rowcount == 1, 'The number of affected rows not equal to 1'con.commit()except:

con.rollback()

logging.exception('Update operation error')raise

finally:

cur.close()

con.close()

PyMySQL已经相当成熟,和Python-MySQL一样,它在很多Linux发行版本中都是可选的安装组件。

相关推荐

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

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

相关文章

Linus Torvalds的最新电脑配置

大家好,祝大家6.1节日快乐最近Linus Torvalds 公布了他的电脑配置,有了这个配置清单之后,每个人都可以拥有一台和Linux之父一样的电脑,当你拥有了一台之后,你可以发个朋友圈,「我今天用Linus 的电脑解了一个…

马上就校招了,是要去实习还是复习?

昨天晚上,遇到一个特别纠结的同学,他现在收到一份实习的通知,他犹豫是要去实习呢还是继续在学校复习学习技术。实习的话可以增加自己校招的筹码,比如在和面试官侃大山的时候,可以把实习这件事情拿出来说,这…

mysql order by 索引名字_MySQL如何利用索引优化ORDER BY排序语句

MySQL索引通常是被用于提高WHERE条件的数据行匹配或者执行联结操作时匹配其它表的数据行的搜索速度。MySQL也能利用索引来快速地执行ORDER BY和GROUP BY语句的排序和分组操作。通过索引优化来实现MySQL的ORDER BY语句优化:1、ORDER BY的索引优化。如果一个SQL语句形…

YAML/Properties配置文件与Spring Boot(转)

多年来,Java开发人员依赖于属性文件或xml文件来指定应用程序配置。在企业应用程序中,人们可以为每个环境(如开发,分段和生产)创建单独的文件,以定义相应环境的属性。但是,通过Spring引导&#x…

嵌入式杂谈之makefile补充

我看了下自己的文章库存,好像还没有一篇关于Makefile的文章,所以这篇刚好可以弥补自己的缺失。makefile预定义变量预定义变量即系统自带的变量预定义变量作用AR库文件维护程序的名称,默认为arAS汇编程序的名称,默认为asCCc编译器的…

Weex 解决Print: Entry, :CFBundleIdentifier, Does Not Exist 错误方法

一、原因 导致这个错误的原因是我们的/user/你的用户名/.rncache文件中 boost_1_63_0.tar.gz文件内容不完整导致 如果你也玩过React-native框架,在0.45版本之后也会出现这个错误。 解决方法: 1、重新下载一个boost_1_63_0.tar.gz文件,替换它&…

mysql表单查询_表单查询实例

[TOC]### 1.查找部门30中员工的详细信息。select * from emp where deptno 30;### 2.找出从事clerk工作的员工的编号、姓名、部门号。select empno,ename,deptno from emp where job clerk;### 3.检索出奖金多于基本工资的员工信息。select * from emp where comm > sal;#…

安卓9.0马达框架分析

前言最近需要将之前的一些驱动接口转为安卓标准接口,方便上层应用或者第三方应用去适配。这篇文章先从简单的马达框架入手进行讲解。正文整个马达框架比较简单,安卓官方已经帮我们实现了framework到HAL层,我们需要实现的就只有驱动层。这篇文…

PYQT4 Python GUI 编写与 打包.exe程序

工作中需要开发一个小工具,简单的UI界面可以很好的提高工具的实用性,由此开启了我的第一次GUI开发之旅,下面将自己学习的心得记录一下,也做为学习笔记吧!!! 参考:http://www.qaulau.…

在MySQL中以下属于ddl语句的_ddl语言(以下哪些命令是ddl语句)

DDL一般指数据定义语言。数据库模式定义语言DDL(Data Definition Language),是用于描述数据库中要存储的现实世界实体的语言。常见的DDL语句:创建数据库.dml触发器 就是普通的 insert / update / delete 触发器。ddl触发器 就是一些特有的 ddl 语句的触发…

你知道嵌入式,那你看过这个吗?

大家好,因为最近各种原因,我身边的很多同事都转行摆地摊了,可能因为那是一份自由的职业,摆地摊可以从事的范围很广,也不用起早贪黑了,而且收入并不低。也是因为这样,很多嵌入式方面的岗位越来越…

mysql把select结果存到变量中_mysql实例 select into保存到变量的例子

本节继续分享mysql中使用select into保存查询结果到变量中的实例。代码:mysql>mysql> CREATE TABLE Employee( //创建雇员表-> id int,-> first_name VARCHAR(15),-> last_name VARCHAR(15),-> start_date DATE,-> end_date DATE,-> salary…

mvc一对多模型表单的快速构建

功能需求描述 Q:在实际的开发中,经常会遇到一个模型中包含有多个条目的表单。如何将数据提交到后台? A: 以数组的形式提交到后台就Ok了(真的那么简单么,如果再嵌套一层呢?) A2:拆分多个模型,映射就没啥问题…

asp删除mysql_asp php 清空access mysql mssql数据库的代码

1、ASP清空ACCESSDim Rs,ConnSet ConnServer.CreateObject("Adodb.Connection")Conn.Open "ProviderMicrosoft.Jet.OLEDB.4.0;Data Source"&server.mappath("readlog.mdb")Set RsConn.OpenSchema(20)Do While not Rs.EofIf Ucase(Rs("T…

c语言中 if(x) 、if(0) 、if(1)

解释if 语句里面包含真和非真&#xff0c;但是如果我们没有写清楚真和非真的话&#xff0c;会如何呢&#xff1f;if(x)相当于if(x ! 0)如果是指针的话&#xff0c;相当于if(x ! NULL)而if(1)相当于if(1 ! 0)还有if(0)相当于if(0 ! 0)举个例子#include<stdio.h> int main(…

接口总结

1.接口定义&#xff1a; ①Java接口是一系列方法的声明&#xff0c;是一些抽象的集合。 ②一个接口只有抽象方法没有方法的实现&#xff0c;因此这些方法可以在不同的地方被不同的类实现&#xff0c;而这些实现可以具有不同的行为&#xff08;功能&#xff09;。 ③简单地说&am…

mysql concat $_mysql concat 的诡异问题

在存储过程中&#xff0c;mysql 中的 concat 函数&#xff0c;总是出现问题&#xff0c;不知道是毛&#xff1f;DROP PROCEDURE IF EXISTS TestPro;CREATE PROCEDURE TestPro()BEGIN-- SET tableName "_aaaa,_bbbb,_cccc,_dddd";SET tableName "_aaaaa,_bbbb,…

看Linus骂人,真解气

感受下Linus骂人的感觉吧&#xff0c; 这样你会觉得工作中遇到的那些不愉快就算个鸟事背景一个Linux主线的内核维护者提交了一份patch&#xff0c;并说明问题产生的原因是因为应用传的音频有问题。Linus回复如下你他娘的给老子闭嘴&#xff01;这是一个内核bug好不好&#xff0…

Vim直接打开Tampermonkey网址的方法。

根据tampermonkey利用require调用本地脚本的方法&#xff0c;比如我电脑上保存了Tampermonkey脚本a.user.js和它调用的a.js&#xff0c; 想在Vim编辑这两个文件时&#xff0c;都能一键打开网页里的a脚本&#xff0c;网址格式是&#xff1a;chrome-extension://dhdgffkkebhmkfjo…

不就是要个30K的薪资,他还问我Nginx调优

我是一个运维“老鸟”&#xff0c;目前在到处找工作阶段。周三刚面试完一家公司&#xff0c;还是非常中意的公司。结果是我中意公司&#xff0c;公司不中意我&#xff0c;妥妥的黄了。面试完我才知道&#xff0c;Linux云计算工程师必须能精通20多个企业级服务器优化。我之前不是…