SQLAlchemy的使用

SQLAlchemy是什么

SQLAlchemy是一款开源的ORM工具,与Django的Model相比兼容性更强。  

如何创建数据库表结构

0,你得先创建一个数据库

1,创建数据库对象,ORM的含义就是对象关系映射,也就是说通过对象来控制数据表。

from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column,Integer,String    #INTEGER和Integer作用相同

Base = declarative_base()    #Base就是实例化的ORM模型
class User(Base):    #相当于Django的Model
__tablename__="user"    #__tablename__是关键字,设置表名
id = Column(Integer,primary_key = True,autoincrement=True)
name = Column(String(32),index=True)

2,连接数据库,不连接数据库,仅仅创建一个类是没有任何意义的

from sqlalchemy import create_engine
engine = create_engine("mysql+pymysql://root:@127.0.0.1:3306/123?charset=utf8") 
Base.metadata.create_all(engine)

增删改查之增

1,使用User ORM模型创建一条数据。

user1 = User(name = "斋藤飞鸟")

2,把数据写入数据库。

from sqlalchemy.orm import sessionmaker    #sessionaaker是用来创建数据库会话的

session = sessionmaker(engine)#上文创建的连接
db_session = session()    #打开 会话对象
db_session.add(user1)    #在会话中添加数据

db_session.commit()    #提交所有对db_session的操作
db_session.close()  #关闭会话
#多条数据的添加和单条一样操作是可行的,也可以使用db_session对象有一个add_all方法,接收可迭代对象如元组列表等,4

增删改查之查

1,简单查询

all_user_list1 = db_session.query(User).all()
for i in all_user_list:
    print(i.id,i.name)

2,高级查询

user_list1 = db_session.query(User).filter(User.id>2).all()  #查询大于2的数据  
user1= db_session.query(User).filter(User.id>2).frist()    #查询第一条数据

#在sqlalchemy中and表示的是如果前一个条件为真那么不考虑后面的条件,or表示的是如果前面的条件为真,后面的条件也为真,那么前面的条件会被覆盖
db_session.query(User).filter(User.id>2 and User.name == "斋藤飞鸟").all()  #查询大于2的数据
db_session.query(User).filter(User.id>2 or User.name == "斋藤飞鸟").all()  #查询name为斋藤飞鸟的数据

#在sqlalchemy中的 _and 和 _or表示与和或
db_session.query(User).filter(and_(User.id>2 , User.name == "斋藤飞鸟")).all() 
db_session.query(User).filter(or_User.id>2 ,User. name == "斋藤飞鸟")).all() 

#查询时顺便起别名
db.session.query(User.name.label("username")).filter(User.name=="斋藤飞鸟")

#原生SQL条件,使用filter_by
db.session.query(User).filter_by("username=斋藤飞鸟")

#排序 order_by
db_session.query(User).order_by(User.id.desc()).all()    #倒序
db_session.query(User).order_by(User.id.desc()).all()    #正序

#分组 group_by
db_session.query(User).group_by(User.id).all()    

#模糊查询
db_session.query(User).filter(User.name.like("飞鸟")).all()  

#复杂查询
from sqlalchemy import text
db_session.query(User).filter(text("select * from User.id<:value and name = :name")).params(value=3,name="飞鸟") 

增删改查之改

#直接修改
db_session.query(User).filter(User.id > 0).update({"name" : "斋藤飞鸟卡哇伊"})

#在原有值基础上添加 
db_session.query(User).filter(User.id > 0).update({User.name: User.name + "卡哇伊"}, synchronize_session=False)

增删改查之删

 db_session.query(User).filter(User.id==2).delete()

跨表操作

使用跨表操作之前需要在建表时声明外键关联

from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column,Integer,String    #INTEGER和Integer作用相同
from sqlalchemy import create_engine

Base = declarative_base()    #Base就是实例化的ORM模型
class User(Base):    #相当于Django的Model
__tablename__="user"    #__tablename__是关键字,设置表名
id = Column(Integer,primary_key = True,autoincrement=True)
name = Column(String(32),index=True)

from SQLalchemy.ext.declarative import declarative_base
from SQLAlchemy import Column,Integer,String    #INTEGER和Integer作用相同

Base = declarative_base()    #Base就是实例化的ORM模型
class User_friends(Base):    #相当于Django的Model
__tablename__="uf"    #__tablename__是关键字,设置表名
id = Column(Integer,primary_key = True,autoincrement=True)
name = Column(String(32),index=True)
user_id = Column(Integer,Foreignkey("user.id"))
friend_relat = relationship("User",backref = "friend")

engine = create_engine("mysql+pymysql://root:@127.0.0.1:3306/123?charset=utf8")

跨表的增删改查就不赘述了,就是通过外间字段名或定义的backref来进行操作。

原文地址:https://www.cnblogs.com/cuiyuanzhang/p/9566989.html