基本用法
from sqlalchemy import create_engine
-- 创建数据库连接/池
engine = create_engine()
-- 建表:使用declarative_base()函数创建基类
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
-- 创建User表
class User(Base):
__tablename__ = "users"
id = Column(Integer, primary_key=True)
name = Column(String)
password = Column(String)
-- 这一行必须要放在表的类的下面,否者会运行错误
-- 检查users表是否存在,如果存在,则跳过运行,不存在创建users表
Base.metadata.create_all(engine)
-- 创建会话
from sqlalchemy.orm import sessionmaker
-- 创建与数据库的会话session class , 这里返回给session的是个class,不是实例
Session = sessionmaker(bind=engine)
session = Session()
ed_user = User(name='ed', fullname='Ed Jones', password='edspassword')
session.add(ed_user)
session.commit()
数据查询
#获取所有数据
session.query(Person).all()
#获取某一列数据,类似于django的get,如果返回数据为多个则报错
session.query(Person).filter(Person.name=='jack').one()
#获取返回数据的第一行
session.query(Person).first()
#过滤数据
session.query(Person.name).filter(Person.id>1).all()
#limit
session.query(Person).all()[1:3]
#order by
session.query(Person).ordre_by(-Person.id)
#equal/like/in
query = session.query(Person)
query.filter(Person.id==1).all()
query.filter(Person.id!=1).all()
query.filter(Person.name.like('%ac%')).all()
query.filter(Person.id.in_([1,2,3])).all()
query.filter(~Person.id.in_([1,2,3])).all()
query.filter(Person.name==None).all()
#and or
from sqlalchemy import and_
query.filter(and_(Person.id==1, Person.name=='jack')).all()
query.filter(Person.id==1, Person.name=='jack').all()
query.filter(Person.id==1).filter(Person.name=='jack').all()
from sqlalchemy import or_
query.filter(or_(Person.id==1, Person.id==2)).all()
Ref:
https://juejin.im/post/5bf741886fb9a049fa0f671e
https://www.osgeo.cn/sqlalchemy/orm/extensions/index.html
https://www.cnblogs.com/liu-yao/p/5342656.html
https://farer.org/2017/10/28/sqlalchemy_scoped_session/