标签:
SQLAlchemy是Python编程语言下的一款ORM框架,该框架建立在数据库API之上,使用关系对象映射进行数据库操作,简言之便是:将对象转换成SQL,然后使用数据API执行SQL并获取执行结果。

一、底层处理
使用 Engine/ConnectionPooling/Dialect 进行数据库操作,Engine使用ConnectionPooling连接数据库,然后再通过Dialect执行SQL语句。
#!/usr/bin/env python
# -*- coding:utf-8 -*-
from sqlalchemy import create_engine
engine = create_engine("mysql+pymysql://root:123@127.0.0.1:3306/t1", max_overflow=5)
# 执行SQL
# cur = engine.execute(
# "INSERT INTO hosts (host, color_id) VALUES (‘1.1.1.22‘, 3)"
# )
# 新插入行自增ID
# cur.lastrowid
# 执行SQL
# cur = engine.execute(
# "INSERT INTO hosts (host, color_id) VALUES(%s, %s)",[(‘1.1.1.22‘, 3),(‘1.1.1.221‘, 3),]
# )
# 执行SQL
# cur = engine.execute(
# "INSERT INTO hosts (host, color_id) VALUES (%(host)s, %(color_id)s)",
# host=‘1.1.1.99‘, color_id=3
# )
# 执行SQL
# cur = engine.execute(‘select * from hosts‘)
# 获取第一行数据
# cur.fetchone()
# 获取第n行数据
# cur.fetchmany(3)
# 获取所有数据
# cur.fetchall()
二、ORM
使用 ORM/Schema Type/SQL Expression Language/Engine/ConnectionPooling/Dialect 所有组件对数据进行操作。根据类创建对象,对象转换成SQL,执行SQL。
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String, ForeignKey, UniqueConstraint, Index
from sqlalchemy.orm import sessionmaker, relationship
engine = create_engine("mysql+pymysql://root:123@127.0.0.1:3306/s13", max_overflow=5)
Base = declarative_base()
# 创建表
class Test(Base):
__tablename__ = ‘test‘
nid = Column(Integer,primary_key=True,autoincrement=True)
name = Column(String(32))
# 一对多
class Group(Base):
__tablename__ = ‘group‘
nid = Column(Integer, primary_key=True, autoincrement=True)
name = Column(String(32))
class Users(Base):
__tablename__ = ‘user‘
nid = Column(Integer,primary_key=True,autoincrement=True)
name = Column(String(32))
group_id = Column(Integer,ForeignKey(‘group_nid‘))
def __repr__(self):
temp = ‘%s - %s - %s‘%(self.nid,self.username,self.group_id)
return temp
def init_db():
Base.metable.create_all(engine)
def drop_db():
Base.metable.drop_all(engine)
Session = sessionmaker(bind=engine)
session = Session()
操作表
1 #定义一个字段 2 add = User(id=2, name=‘mxz‘) 3 #添加字段 4 session.add(add) 5 #添加多个字段 6 session.add_all([ 7 User(id=3, name=‘aaa‘), 8 User(id=4, name=‘bbb‘) 9 ]) 10 #提交以上操作 11 session.commit()
==================================================================
1 #删除user表,id大于2的字段 2 session.query(User).filter(User.id > 2).delete() 3 session.commit()
==================================================================
1 在执行以下操作 2 #user表里的id等于2的字段修改为id=6 3 session.query(User).filter(User.id == 2).update({‘id‘ : 6}) 4 session.commit()
==================================================================
1 # 查询users表下面所有的字段 2 ret = session.query(Users).all() 3 4 ret = session.query(Users.name, Users.extra).all() 5 # 查询users表下面所有name=mxz的字段 6 ret = session.query(Users).filter_by(name=‘mxz‘).all() 7 # 查询users表下面第一个name=mxz的字段 8 ret = session.query(Users).filter_by(name=‘mxz‘).first()
标签:
原文地址:http://www.cnblogs.com/mxzheng/p/5735538.html