Python3 pymysql 访问MySql数据库

摘要:
使用pymysql访问MySQL数据库。注意,有些使用PyMySQL,Python2是mysqldb。如果您没有这个模块,请安装它:pipinsallpymysql(我将Java转换为Python,我有编写Java的习惯。如果有任何错误,请及时提出并相互沟通)1。定义获取数据库连接的模块database。pyimport pymysqlclassMySQL:__config={'host':'127.0

使用pymysql来访问MySQL数据库,注意,有些使用PyMySQL,Python2是mysqldb

如没该module则安装:pip install pymysql

(本人Java转Python,还有java编写习惯,有错误请及时提出,相互交流)

1、定义获取数据库连接的Module,

 DataBase.py

import pymysql

class MySQLDB:
    __config={
    'host' : '127.0.0.1',
    'port' : 3306,
    'user' : 'root',
    'password' : 'admin',
    'db' : 'test',
    'charset' : 'utf8'
    }
    #定义了静态方法,类名可直接打点调用
    @staticmethod
    def getConn():
        connection = pymysql.connect(**MySQLDB.__config)
        return connection

2、EmpDao.py 访问数据DAO层

 1 from dataBase import DataBase
 2 from dataBase import Entity
 3  
 4 class EmpDao:
 5     '''
 6     emp表的DAO
 7     '''
 8     def saveEmp(self,empEntity):
 9         """
10         保存
11         """
12         try:
13             self.connection=DataBase.MySQLDB.getConn();#获取数据库连接
14             with self.connection.cursor() as cursor: #获取游标
15                 sql = 'INSERT INTO emp (empno,ename,mgr,job,hiredate,sal,comm,deptno) VALUES (%s, %s, %s, %s, %s,%s,%s,%s)'
16                 cursor.execute(sql, empEntity) #执行SQL
17                 self.connection.commit() #提交事务
18         except Exception as e:
19             print(e) #打印异常
20         finally:
21             self.connection.close()#关闭数据库连接
22 
23 
24     def selectEmp(self,sqlParam):
25         """
26         条件查询
27         """
28         try:
29             self.connection = DataBase.MySQLDB.getConn();
30             with self.connection.cursor() as cursor:
31                 sql='select empno,ename,job,mgr,sal,comm,hiredate,deptno from emp where 1=1  '
32                 if sqlParam:
33                     sql=sql+' %s '%(sqlParam) #插入条件sql片段
34                 print(sql)
35                 cursor.execute(sql)
36                 self.rows = cursor.fetchall()#抓取行数据  
37         except Exception as e:
38              print(e)
39         finally:
40             self.connection.close()
41         return self.rows
42 
43 
44     def selectRowCount(self,sqlParam):
45         """
46         查询总记录数
47         """
48         try:
49             self.connection=DataBase.MySQLDB.getConn()
50             with self.connection.cursor() as cursor:
51                 sql='select count(empno) from emp where 1=1 '
52                 if sqlParam:
53                     sql=sql+'%s'%(sqlParam)#sql条件片段
54                 print(sql)
55                 cursor.execute(sql)
56                 self.rows=cursor.fetchall()
57         except Exception as e:
58             print(e)
59         finally:
60             self.connection.close()
61         return self.rows[0][0]
62 
63 
64     def selectRowsPaper(self,sqlParam=None,pageNow=1,pageSize=5):
65         """
66         分页查询
67         """
68         self.pageNow=pageNow
69         self.pageSize=pageSize
70         self.offset=(self.pageNow-1)*self.pageSize #偏移量
71         self.total=self.selectRowCount(sqlParam)#总记录数
72         #总页数
73         self.totalPage= int(self.total/self.pageSize)  if self.total%self.pageSize==0 else int(self.total/self.pageSize) +1
74 
75         try:
76             self.connection = DataBase.MySQLDB.getConn()
77             with self.connection.cursor() as cursor:
78                 sql = 'select  empno,ename,job,mgr,sal,comm,hiredate,deptno from emp where 1=1 '
79                 if sqlParam:
80                     sql = sql + '%s' % (sqlParam)
81                 sql=sql+' limit %s,%s'%(self.offset,self.pageSize)
82                 print(sql)
83                 cursor.execute(sql)
84                 self.rows = cursor.fetchall()
85                 return {'total':self.total,'pageNow':self.pageNow,'totalPage':self.totalPage,'rows':self.rows}
86         except Exception as e:
87             print(e)

3、测试

(1)新增

1 if __name__ == '__main__':
2     empDao =EmpDao(
3     empDao.saveEmp((116, 'ZYG', 7989, 'Teacher', '1999-10-10', 23000, None, 20))

(2)分页查询

if __name__ == '__main__':
    empDao =EmpDao()
    #分页查询
    res=empDao.selectRowsPaper(pageNow=2)
    print(res)
    s=res['rows']
    for r in s:
        print('编号:%s,姓名:%s,入职日期:%s,工资:%s,部门:%s' % (r[0], r[1], r[6], r[4], r[7]))

 通过字典形式封装,拼接sql:

 1 #mysql新增操作
 2 import pymysql
 3 data={
 4     "post_uuid":'10100',
 5     "post_name":'1',
 6     'organ_uuid':10,
 7     'moddate':'20101010',
 8     'user_uuid':'1',
 9     'role_name':'科员101',
10     'remark':''
11 }
12 tableName='pt_post'
13 columns=','.join(data.keys())
14 values=','.join(['%s']*len(data))
15 sql=    'insert into {table}({keys}) VALUES ({values}) '.format(table=tableName, keys=columns, values=values)
16 print(sql)
17 db = pymysql.connect(host='localhost', user='root',password='admin', port=3306, db ='test')
18 print(tuple(data.values()))
19 cursor = db. cursor()
20 cursor.execute(sql,tuple(data.values()))
21 db.commit()

免责声明:文章转载自《Python3 pymysql 访问MySql数据库》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇亚马逊AWS学习——多网络接口下配置EC2实例连接公网的一个“bug”java.sql.SQLException: ORA-28040: 没有匹配的验证协议(12c或者12c rac)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

mysql主从 1050错误

在mysql从库上查询时出现如下错误 ...................... Last_Errno: 1050                    Last_Error: Error 'Table 'jiuku_brand_img' already exists' on query. Default database: 'wine_cn'. Qu...

kubernetes集群部署mysql 8.0

参考:https://blog.csdn.net/sealir/article/details/81177747?utm_source=blogxgwz1 集群内安装mysql并添加相应存储(PVC)  新建mysql-pvc.yaml、mysql-deploy.yaml和mysql-svc.yaml,分别如下:  先找出当前k8s集群下的storageC...

微博的MySQL数据库优化实践经验

数据库是所有架构中不可缺少的一环,一旦数据库出现性能问题,那对整个系统都会来带灾难性的后果。并且数据库一旦出现问题,由于数据库天生有状态(分主从)带数据(一般还不小),所以出问题之后的恢复时间一般不太可控,所以,对数据库的优化是需要我们花费很多精力去做的。接下来就给大家介绍一下微博数据库这些年的一点经验,希望可以对大家有帮助。 硬件层优化 这一层最简单,最...

索引长度过长 ERROR 1071 (42000): Specified key was too long; max key length is 767 bytes

1.发现问题  今天在修改innodb表的某个列的长度时,报如下错误:   [html]view plaincopy  print? alter table test2 modify column id varchar(500);   ERROR 1071 (42000): Specified key was too long; max key ...

Nodejs mysql 数据库增、删、改、查 操作

Nodejs mysql的增、删、改、查操作 Nodejs连接mysql的增、删、改、查操作(转载 自:http://blog.sina.com.cn/s/blog_5a6efa330102vctw.html) 一、准备 nodejs的教程,大多以操作mongodb为示例。但是mongodb有一些局限性,具体官网上有说。我打算用MySQL,因为多少还有...

mysql启动报错“NET HELPMSG 3534“的解决办法

原因: mysql安装步骤错误,从mysql5.7.6开始,mysql需要这样安装: mysqld --initialize-insecure或者mysqld --initialize mysqld -install net start mysql mysqld --initialize-insecure自动生成无密码的root用户,mysqld --...