Python 之 MySQL 操作库 lazy_mysql
TOC
Intro
lazy_mysql 是一个非常简单易用,用来操作 MySQL 的 Python 第三方库。它基于 MySQL-python
之上提供了四个常用对象,分别是:
- Engine : 负责连接数据库,执行 SQL 语句。
- Pool : 数据库连接池,负责管理 Engine 对象。
- Table : 该对象映射到数据表。
- Column : 该对象映射到数据表字段。
Dependencies
- Python 2.6 - 2.7
- MySQLdb-python 1.2.3+
Installation
从 GitHub 下载。
git clone https://github.com/hendiko/lazy_mysql.git
或者直接下载 lazy_mysql.py
文件,将 lazy_mysql.py
文件放到项目中任意可导入目录均可。
Tutorial
1. 建立数据库连接
使用 Engine 对象连接数据库。
from lazy_mysql import Engine, Pool, Table, Column
engine = Engine('localhost', 'test', 'root', 'root')
如果要应付多线程多并发连接,可使用 Pool 对象来管理数据库连接,Pool 的作用是提供一个连接池,用以管理多个 Engine 对象。
pool = Pool('localhost', 'test', 'root', 'root', pool_size=4, extras=4)
2. 建立 Table 类
新建一个 Table 对象来映射数据表,只需要新建一个类继承自 Table 类。
class Schedule(Table):
def __init__(self, table_name='schedule', _engine=engine, *columns):
super(Schedule, self).__init__(table_name, _engine, *columns)
self.schedule_id = Column('scheduleId')
self.task_id = Column('taskId')
self.task_name = Column('taskName')
self.status = Column('status')
_engine 参数可以接收一个 Engine 或 Pool 实例对象。
在初始化中定义数据表字段,你可以只初始化部分字段而非全部字段,Column 对象代表一个字段对象,实例化一个 Column 字段仅需要传入一个字段名称,Column 对象不会检查字段类型及合法性。
3. Select 操作
# 实例化一个数据表对象。
s = Schedule()
# SELECT * FROM schedule LIMIT 1;
s.select().go()
# SELECT * FROM schedule;
s.select().limit().go()
# SELECT taskName, status FROM schedule WHERE (taskId=1) LIMIT 1;
s.select(s.task_name, s.status).where(schedule.task_id == 1).go()
# SELECT DISTINCT taskName FROM schedule WHERE (scheduleId=1) GROUP BY taskName ORDER BY taskId DESC LIMIT 1, 4;
s.select(s.task_name).where(s.schedule_id == 1).distinct().order(s.task_id, desc=True).group_by(s.task_name).limit(1, 4).go()
# SELECT * FROM schedule WHERE (scheduleId=1 AND taskId=2) OR (taskId=2) AND (taskName='query') LIMIT 1;
s.select().where(s.schedule_id == 1, s.task_id == 3).where(s.task_id == 2).where_and(s.task_name == "query").go()
4. Insert 操作
# INSERT INTO schedule SET taskName='query';
s.insert(**{s.task_name.name: 'query'}).go()
# 或者
s.insert(taskName="query").go()
5. Update 操作
# UPDATE schedule SET taskName='query2' WHERE (scheduleId=5) LIMIT 1;
s.update(**{s.task_name.name: "query2"}).where(s.schedule_id == 5).go()
# 或者
s.update(taskName="query2").where(s.schedule_id == 5).go()
6. Delete 操作
# DELETE FROM schedule WHERE (scheduleId=5) LIMIT 1;
s.delete().where(s.schedule_id == 5).go()
7. Count 操作
# SELECT COUNT(DISTINCT scheduleId) AS X FROM schedule WHERE (scheduleId>2) LIMIT 1;
s.count(s.schedule_id, distinct=True).where(s.schedule_id > 2).go()
API
1. Engine
Engine 对象负责数据库连接,执行 SQL 语句。
1.1. _init_(self, host, schema, user, pw, port=3306, charset='utf8', cursor_class='dict', autocommit=True, debug=True, *args, **kwargs):
- host: 数据库主机
- schema: 数据库名称。
- user: 用户名。
- pw: 密码。
- port: 端口。
- charset: 字符集。
- cursor_class: 游标类型,默认值为 'dict',其他均返回 tuple 类型的结果集。
- autocommit: 自动提交。
- debug: 调试模式,若为真,则打印 SQL 语句。
- args: 其他 MySQLdb.connect() 参数。
- kwargs: 其他 MySQLdb.connect() 参数。
1.2. affected_rows
执行 SQL 语句影响的数据表行数。
1.3. last_executed
最后一次成功执行的 SQL 语句。
1.4. cursor_class
数据库连接游标类型。如果 cursor_class='dict'
,则使用 DictCursor,否则使用 Cursor。
1.5. connect(self, cursor_class=None)
返回 Connection 对象,连接数据库,如果 cursor_class 为 None,则使用默认的 self.cursor_class 属性进行连接。
1.6. close(self)
关闭 Connection 对象。
2. Pool
2.1. _init_(self, host, schema, user, pw, port=3306, charset='utf8', cursor_class='dict', autocommit=True, debug=True, pool_size=2, extras=4, wait_time=5, *args, **kwargs):
初始化连接池,用以管理 Engine 对象。Pool 内部有一个保存 Engine 对象的队列 self.pool。Pool 允许在连接池外额外创建一些 Engine 对象用以应付超出预期的请求数量。
Pool 初始化参数与 Engine 初始化参数大部分相同。
- pool_size: 设置连接池大小。
- extras: 当连接池满时,允许额外创建的 Engine 对象最大数量。
- wait_time: 当连接池为空时,等待获取 Engine 的超时时间。
2.2. count
当前所有 Engine 对象数量。
2.3. put(self, engine=None)
回收 Engine 对象到连接池。
2.4. get(self)
从连接池申请 Engine 对象。
2.5. spawn_engine(self):
创建新的 Engine 对象。
3. Column
数据库字段对象。
3.1. _init_(self, name)
参数 name 为数据库字段名称。
3.2. like(self, other)
实现 SQL LIKE 语句。
3.3. in_(self, *other)
实现 SQL IN 语句。
3.4. between(self, floor, ceil)
实现 SQL BETWEEN 语句。
3.5. is_null(self, boolean=True)
实现 SQL IS NULL 或 IS NOT NULL 语句。
4. Table
4.1. _init_(self, table_name, _engine=None, *columns)
实例化 Table 对象。
- table_name: 数据表名称。
- _engine: 支持传入 Engine 或 Pool 对象。
4.2. add_column(self, *columns)
向 Table 添加字段属性。
4.3. remove_column(self, *columns)
从 Table 删除字段属性。
4.4. binding_engine(self, engine)
重新绑定数据表的 engine 属性,参数 engine 支持传入 Engine 或 Pool 对象。
4.5. select(self, *columns)
执行 SELECT 语句。
4.6. insert(self, **assignments)
执行 INSERT 语句。
4.7. update(self, **assignments)
执行 UPDATE 语句。
4.8 delete(self)
执行 DELETE 语句。
4.9. count(self, column=None, distinct=None)
执行 COUNT 语句。
Python 之 MySQL 操作库 lazy_mysql的更多相关文章
- python连接mysql操作(1)
python连接mysql操作(1) import pymysql import pymysql.cursors # 连接数据库 connect = pymysql.Connect( host='10 ...
- python对Mysql操作和使用ORM框架(SQLAlchemy)
python对mysql的操作 Mysql 常见操作 数据库操作 创建数据库 create database fuzjtest 删除数据库 drop database fuzjtest 查询数据库 s ...
- Python的Mysql操作
网上好多的帖子感觉比较老了,而且千篇一律.我到mysql看了一下官网上python驱动的操作,发现与大部分网站说的都不一样. 首先安装的驱动是: pip install mysql-connector ...
- Ubuntu中python的mysql操作
1.在已经安装了python和MySQL数据库的前提下使用pip3 install PyMySQL命令 2. 建立链接: (1)首先使用命令python 进入编程模式,再导入包: import pym ...
- python数据库(mysql)操作
一.软件环境 python环境默认安装了sqlite3,如果需要使用sqlite3我们直接可以在python代码模块的顶部使用import sqlite3来导入该模块.本篇文章我是记录了python操 ...
- python 异步MySQL存库
对于异步框架而言,这些延迟是无法接受的.因此, Twisted 提供了 twisted.enterprise.adbapi, 遵循DB-API 2.0协议的一个异步封装. adbapi 在单独的线程里 ...
- Python之MySQL操作及Paramiko模块操作
一.MySQL简介 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下公司.MySQL 最流行的关系型数据库管理系统,在 WEB 应用方面MySQ ...
- Python之MySql操作
1.安装驱动 输入命令:pip install MySQL-python 2.直接使用驱动 #coding=utf-8 import MySQLdb conn= MySQLdb.connect( ho ...
- Python 使用PyMySql 库 连接MySql数据库时 查询中文遇到的乱码问题(实测可行) python 连接 MySql 中文乱码 pymysql库
最近所写的代码中需要用到python去连接MySql数据库,因为是用PyQt5来构建的GUI,原本打算使用PyQt5中的数据库连接方法,后来虽然能够正确连接上发现还是不能提交修改内容,最后在qq交流群 ...
随机推荐
- paip.hibernate save 失败的解决
paip.hibernate save 失败的解决 打开log debug level,,看不见insert 代码... Hibernate select max(ID).txt ...
- paip.环境设置 mybatis ibatis cfg 环境设置
paip.环境设置 mybatis ibatis cfg 环境设置 三部分 //////////1. 电泳.... ............2. 猪配置文件 com/mijie/homi/searc ...
- paip.数组以及集合的操作uapi java php python总结..
paip.数组以及集合的操作uapi 作者Attilax 艾龙, EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http://blog.csdn.net/att ...
- java继承3个小题
1.实现一个名为Person的类和它的子类Employee,Employee有两个子类Faculty和Staff.具体要求如下: (1)Person类中的属性有:姓名name(String类型),地址 ...
- 更改Windows系统的密码之后,SQL Server 2008服务无法启动
问题:更改Windows操作系统的密码之后,SQL Server 2008服务无法启动. 原因:SQL Server服务需要使用操作系统的某个登录账户. 解决:需要在服务的属性窗口中修改账户密码,然后 ...
- Serializable 和 Parcelable 区别
http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0204/2410.html http://www.cnblogs.com/blu ...
- GO語言視頻教程
第1课:https://github.com/Unknwon/go-fundamental-programming/blob/master/lectures/lecture1.md Go开发环境搭建h ...
- 报错:LINQ to Entities 不识别方法
大致是: var products = db.Products.Select(new ProductVm{Name=SomeMethod() }); 针对IQueryable集合的查询操作会被LINQ ...
- malloc钩子和内存泄漏工具mtrace、Valgrind
一:malloc钩子函数 static void* (* old_malloc_hook) (size_t,const void *);static void (* old_free_hook)(vo ...
- Unity3D去掉全屏时的屏幕黑边
给全屏后不在乎拉伸变形仍想让画面占满屏幕的朋友,网上搜了一上午,实在是没有相关的资料,只能自己琢磨了. 使用Canvas Scaler在全屏后Unity虽然会为我们自动拉伸UI,但拉伸后仍然保持我们在 ...