封装的python mysql操作ORM类

这段时间写项目用了python的mysql模块,觉得sqlalchemy太庞大就自己封装了一个简单的基于mysql-python的ORM文件。功能目前刚好够用以后会慢慢完善。这个操作类中解决了python编码和入mysql库编码不统一的问题,同时还解决了mysql的反斜杠'\'会被转义丢弃的问题。

1、安装mysql-python模块

python的mysql操作需要安装mysql-python库,安装方法如下。

sudo pip install MySQL-python

如果安装的时候报错,提示EnvironmentError: mysql_config not found,请安装libmysqld-dev

2、我的mysql-python封装操作模型

首先是mysql连接配置文件config.py:

#Mysql配置
mysql_host='localhost'
mysql_user='root'
mysql_passwd='12345'
mysql_db='test'
mysql_charset='utf8'

然后是封装的操作类,由于代码比较长,请移步github查看。下面我说下简单的用法:

#!/usr/bin/python
#-*- coding:utf-8 -*-
#在config.py里配置数据库连接
from mysql_conn import myMdb

mydb = myMdb()

#新建表结构
mydb.setTable('testtablename',
            "(`test_id` int(10) NOT NULL AUTO_INCREMENT,`test_col1` varchar(255) NOT NULL,`test_col2` varchar(255) NOT NULL, PRIMARY KEY (`test_id`), KEY `test_col1` (`test_col1`), KEY `test_col2` (`test_col2`)) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;"
            )

#新增数据记录
tag = mydb._insert({'test_col1':'123','test_col2':'455'})._from('testtablename').execute()
print tag

#修改数据记录
tag = mydb._update({'test_col2':'456'})._from('testtablename')._where({'column':'test_id','data':'1','relation':'='}).execute()
print tag

#删除数据记录
tag = mydb._delete()._from('testtablename')._where({'column':'test_id','data':'3','relation':'<'}).execute()
print tag

#查询前100条数据并排序
rs = mydb._select('*')._from('testtablename')._where({'column':'test_col1','data':'123','relation':'='})._where({'column':'test_col2','data':'456','relation':'!='})._limit(100,1)._order({'test_id':'DESC'}).execute()
print rs

#两表联合查询
rs = mydb._select('a.*')._from('testtablename_1','a')._leftjoin('testtablename_2','b','a.test_col1=b.test_col1')._where({'column':'a.test_col1','data':'123','relation':'='}).execute()
print rs

#支持上下文管理方式调用
with myMdb() as mydb:
    tag = mydb._insert({'test_col1':'123','test_col2':'455'})._from('testtablename').execute()
print tag

#打印调试最近一次执行的sql语句
print mydb.getsql

 

如果使用mysql-python官方扩展的时候报错

OperationalError: (2002, "Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)")

其原因是我将mysql的sock文件已经调整到/tmp/mysql.sock,所以必须在mysqldb中指定sock的路径,unix_socket参数指定了sock文件的路径

mdb.connect(host=config.mysql_host, user=config.mysql_user, passwd=config.mysql_passwd, db=config.mysql_db, charset=config.mysql_charset, unix_socket='/tmp/mysql.sock')

 

posted on 2014-04-09 17:15  齐柏林飞艇  阅读(3997)  评论(0编辑  收藏  举报