SQLAlchemy简介-Python中基于ORM的实现框架

勿忘初心2018-10-19 18:41

此文已由作者吴桐授权网易云社区发布。

欢迎访问网易云社区,了解更多网易技术产品运营经验。


前段时间因为测试需求,需要用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攻击的原理和防范措施