标签:
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