SQLAlchemy是Python编程语言下的一款ORM框架,该框架建立在数据库API之上,使用关系对象映射进行数据库操作,简言之便是:将对象转换成SQL,然后使用数据API执行SQL并获取执行结果。
SQLAlchemy是一个独立的orm,对比django的orm框架而言,django无法把它的orm拿出来独立应用在别的web框架下
三层结构,第一层就是orm,第二层就sqlalchemy核心功能维护连接池(connecntio poolling)、Dialect负责跟dbapi打交道,原生sql等。orm再强有的时候也必须使用sql处理复杂查询。第三层dbapi。
SQLAlchemy本身无法操作数据库,本身就是一个翻译官将函数或类翻译成sql语言,其必须以来pymsql(py3)等第三方插件,Dialect用于和数据API进行交流,根据配置文件的不同调用不同的数据库API,从而实现对数据库的操作
如(数据库需要自己建立):
MySQL-Python mysql+mysqldb://<user>:<password>@<host>[:<port>]/<dbname> pymysql mysql+pymysql://<username>:<password>@<host>/<dbname>[?<options>] MySQL-Connector mysql+mysqlconnector://<user>:<password>@<host>[:<port>]/<dbname> cx_Oracle oracle+cx_oracle://user:pass@host:port/dbname[?key=value&key=value...] 更多详见:http://docs.sqlalchemy.org/en/latest/dialects/index.html
使用 Engine/ConnectionPooling/Dialect 进行数据库操作,Engine使用ConnectionPooling连接数据库,然后再通过Dialect执行SQL语句。如果orm满足不了就可以使用这个
1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 from sqlalchemy import create_engine 4 5 6 engine = create_engine("mysql+pymysql://root:123456@127.0.0.1:3306/test", max_overflow=5) 7 8 # 执行SQL 9 # cur = engine.execute( 10 # "INSERT INTO hosts (host, color_id) VALUES ('1.1.1.22', 3)" 11 # ) 12 13 # 新插入行自增ID 14 # cur.lastrowid 15 16 # 执行SQL 17 # cur = engine.execute( 18 # "INSERT INTO hosts (host, color_id) VALUES(%s, %s)",[('1.1.1.22', 3),('1.1.1.221', 3),] 19 # ) 20 21 22 # 执行SQL 23 # cur = engine.execute( 24 # "INSERT INTO hosts (host, color_id) VALUES (%(host)s, %(color_id)s)", 25 # host='1.1.1.99', color_id=3 26 # ) 27 28 # 执行SQL 29 # cur = engine.execute('select * from hosts') 30 # 获取第一行数据 31 # cur.fetchone() 32 # 获取第n行数据 33 # cur.fetchmany(3) 34 # 获取所有数据 35 # cur.fetchall()