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来进行操作。