此文已由作者吴桐授权网易云社区发布。
欢迎访问网易云社区,了解更多网易技术产品运营经验。
前段时间因为测试需求,需要用Python来实现后台的数据一致性验证,有大量的数据库查表操作,刚刚开始我通过MySQLdb来封装查表的操作,例如我要查某个字段的数据的代码如下:
import MySQLdb conn = MySQLdb.connect(host = '127.0.0.1', user = 'root', passwd = 'root', port = 3306, db = 'ops_test') cursor = conn.cursor() cursor.execute("""select * from user where account='%s' and user_popo='%s'"""%('user', 'user@corp.netease.com')) rows = cursor.fetchall() cursor.close() conn.close() print(rows)
这么做虽然能够达到目的,但是存在以下一些问题:
1、需要手动写SQL语句,比较简单粗暴
2、每次从数据库取数据都要发起一次建立连接、关闭连接的过程,比较繁琐
3、在多张表联合查询、插入、删除等场景下,这种方法比较繁琐。
。。。。。。
这些显然不应该是一个高级语言所拥有的特性。
那有没有一种功能强悍,逻辑清晰的方法可以解决上面那些弊端呢?能不能像Java里面的iBATIS(MyBatis)一样,能做到支持SQL映射的持久层框架呢?SQLAlchemy正是这样一个框架,是一种基于ORM的解决方案。
安装SQLAlchemy:
1、简易安装方法
pip install SQLAlchemy
2、下载最新版本的SQLAlchemy手动安装
下载地址:http://www.sqlalchemy.org/download.html
解压后运行:
python setup.py install
使用SQLAlchemy查询数据:
1、导入模块:
import sqlalchemyfrom sqlalchemy import ormfrom sqlalchemy.ext import declarative
2、创建数据库引擎:
engine_args = dict(echo=False, convert_unicode=True, pool_recycle=3600, pool_size=0, max_overflow=-1) sql_connection = "mysql://root:root@127.0.0.1:3306/ops_test?charset=utf8"engine = sqlalchemy.create_engine(sql_connection, **engine_args)
3、建立连接session:
meta = sqlalchemy.MetaData(bind=engine, reflect=True) Base = declarative.declarative_base() session = orm.sessionmaker(bind=engine)()
4、创建查询user表的模型:
class ModelUser(Base): __table__ = meta.tables.get('user')
6、查询字段:
query = session.query(ModelUser).filter_by(account='user') result = query.all() ls = result[0]print ls.user_name
7、关闭session:
session.close()
这种基于ORM的操作方式,通过创建增、删、改、查模型来实现各种数据库操作,当然这篇文章只是介绍了一下SQLAlchemy的简单功能,还有很多强大的功能没有讲到,有兴趣的同学可以深度挖掘一下。
网易云免费体验馆,0成本体验20+款云产品!
更多网易技术、产品、运营经验分享请点击。
相关文章:
【推荐】 反射型DDoS攻击的原理和防范措施