#SQLAlchemy ORM框架
功能:类/对象操作 -> SQL ->pymysql、mySQLdb ->再去数据库中执行
pip3 install sqlalchemy
?
?
?
?
组成部分
#Engine, 框架的引擎#Connection Pooling ,数据库连接池#Dialect 选择连接数据库的DB API种类#Schema/Types, 架构和类型#SQL Exprression Language,SQL表达式语言
Dialect(方言)
#SQLAlchemy本身无法操作数据库,其必须以来pymsql等第三方插件,Dialect用于和数据API进行交流,根据配置文件的不同调用不同的数据库API,从而实现对数据库的操作,#如:MySQL-Python mysql mysqldb://<user>:<password>@<host>[:<port>]/<dbname> pymysql mysql pymysql://<username>:<password>@<host>/<dbname>[?<options>] MySQL-Connector mysql mysqlconnector://<user>:<password>@<host>[:<port>]/<dbname> cx_Oracle oracle cx_oracle://user:pass@host:port/dbname[?key=value&key=value...]View Code
?
?
注:不能修改表,指的是不能修改表字段,添加删除字段
#__tablename__ 数据库表名称#__table_args__ 数据库表的其他信息,联合唯一,字符编码等
models.py
最最基本的格式Base = declarative_base()class Users(Base): #添加字段def init_db(): #根据类创建数据可def drop_db(): #根据类删除数据库表if __name__ == '__main__': # drop_db() #删除表,慎重 init_db()-------------------------------------------------------------------from sqlalchemy import create_enginefrom sqlalchemy.ext.declarative import declarative_basefrom sqlalchemy import Column, Integer, String, Text, ForeignKey, DateTime, UniqueConstraint, IndexBase = declarative_base()class Users(Base): __tablename__ = 'users' # 数据库表名称 id = Column(Integer, primary_key=True) # id 主键 name = Column(String(32), index=True, nullable=False) # name列,索引,不可为空 age = Column(Integer) __table_args__ = { # UniqueConstraint('id', 'name', name='uix_id_name'), #联合唯一 # Index('ix_id_name', 'name', 'email'), #索引 # 'mysql_engine': 'InnoDB', # 'mysql_charset': 'utf8'}#根据类创建数据可def init_db(): engine = create_engine( "mysql pymysql://root:123456@127.0.0.1:3306/aaa?charset=utf8", max_overflow=0, # 超过连接池大小外最多创建的连接 pool_size=5, # 连接池大小 pool_timeout=30, # 池中没有线程最多等待的时间,否则报错 pool_recycle=-1 # 多久之后对线程池中的线程进行一次连接的回收(重置) ) Base.metadata.create_all(engine)#根据类删除数据库表def drop_db(): engine = create_engine( "mysql pymysql://root:123456@127.0.0.1:3306/aaa?charset=utf8", max_overflow=0, # 超过连接池大小外最多创建的连接 pool_size=5, # 连接池大小 pool_timeout=30, # 池中没有线程最多等待的时间,否则报错 pool_recycle=-1 # 多久之后对线程池中的线程进行一次连接的回收(重置) ) Base.metadata.drop_all(engine)if __name__ == '__main__': # drop_db() init_db()View Code
?
app.py
from sqlalchemy.orm import sessionmakerfrom sqlalchemy import create_enginefrom models import Users#"mysql pymysql://root@127.0.0.1:3306/aaa"engine = create_engine("mysql pymysql://root:123456@127.0.0.1:3306/aaa", max_overflow=0, pool_size=5)Connection = sessionmaker(bind=engine)# 每次执行数据库操作时,都需要创建一个Connectioncon = Connection()# ############# 执行ORM操作 #############obj1 = Users(name="lqz")con.add(obj1)# 提交事务con.commit()# 关闭session,其实是将连接放回连接池con.close()View Code
增删改查
#----------------------------增"""注意最后提交事务add增加单个,add_all批量增加,注意放到列表中""" obj1 = Users(name="lqz",age=18)con.add(obj1)# 提交事务con.commit()obj2=Users(name='p1',age=1)obj3=Users(name='p2',age=2)obj4=Users(name='p2',age=3)obj5=Users(name='p4',age=4)con.add_all([obj2,obj3,obj4,obj5])con.commit()#------------------------------------查View Code
?
来源:https://www.icode9.com/content-2-345701.html联系客服