标签:__ engine SQLAlchemy Users 数据库 mysql name
一、介绍
#SQLAlchemy ORM框架
功能:类/对象操作 -> SQL ->pymysql、mySQLdb ->再去数据库中执行
pip3 install sqlalchemy
组成部分
#Engine, 框架的引擎 #Connection Pooling ,数据库连接池 #Dialect 选择连接数据库的DB API种类 #Schema/Types, 架构和类型 #SQL Exprression Language,SQL表达式语言
Dialect(方言)
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#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
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
最最基本的格式 Base = declarative_base() class Users(Base): #添加字段 def init_db(): #根据类创建数据可 def drop_db(): #根据类删除数据库表 if __name__ == '__main__': # drop_db() #删除表,慎重 init_db() ------------------------------------------------------------------- from sqlalchemy import create_engine from sqlalchemy.ext.declarative import declarative_base from sqlalchemy import Column, Integer, String, Text, ForeignKey, DateTime, UniqueConstraint, Index Base = 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
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
from sqlalchemy.orm import sessionmaker from sqlalchemy import create_engine from 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) # 每次执行数据库操作时,都需要创建一个Connection con = Connection() # ############# 执行ORM操作 ############# obj1 = Users(name="lqz") con.add(obj1) # 提交事务 con.commit() # 关闭session,其实是将连接放回连接池 con.close()View Code
增删改查
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#----------------------------增 """ 注意最后提交事务 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
标签:__,engine,SQLAlchemy,Users,数据库,mysql,name 来源: https://www.cnblogs.com/pdun/p/11228324.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。