打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
SQLAlchemy

一、介绍

#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
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
【Python之路】第十九篇
最全总结 | 聊聊 Python 数据处理全家桶(Mysql 篇)
Python操作MySql——使用SQLAlchemy ORM操作数据库
为什么你应该使用PHP PDO访问数据库
Python量化交易,绝对干货!Tushare将股票行情存入Mysql数据库
如何使用python连接数据库,插入并查询数据?
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服