当前位置: 首页 > news >正文

受欢迎的唐山网站建设SUPERW上海网站建设工作室

受欢迎的唐山网站建设,SUPERW上海网站建设工作室,怎么做原创短视频网站,网站建设的开源平台SQLAlchemy 1.介绍 SQLAlchemy是一个基于Python实现的ORM框架。该框架建立在 DB API之上#xff0c;使用关系对象映射进行数据库操作#xff0c;简言之便是#xff1a;将类和对象转换成SQL#xff0c;然后使用数据API执行SQL并获取执行结果。 pip3 install sqlalchemy组… SQLAlchemy 1.介绍 SQLAlchemy是一个基于Python实现的ORM框架。该框架建立在 DB API之上使用关系对象映射进行数据库操作简言之便是将类和对象转换成SQL然后使用数据API执行SQL并获取执行结果。 pip3 install sqlalchemy组成部分 Engine框架的引擎 Connection Pooling 数据库连接池 Dialect选择连接数据库的DB API种类 Schema/Types架构和类型 SQL Exprression LanguageSQL表达式语言SQLAlchemy本身无法操作数据库其必须以来pymsql等第三方插件Dialect用于和数据API进行交流根据配置文件的不同调用不同的数据库API从而实现对数据库的操作如 MySQL-Pythonmysqlmysqldb://user:passwordhost[:port]/dbnamepymysqlmysqlpymysql://username:passwordhost/dbname[?options]MySQL-Connectormysqlmysqlconnector://user:passwordhost[:port]/dbnamecx_Oracleoraclecx_oracle://user:passhost:port/dbname[?keyvaluekeyvalue...]更多http://docs.sqlalchemy.org/en/latest/dialects/index.htmldjango中如何反向生成models python manage.py inspectdb app/models.py2.简单使用能创建表删除表不能修改表 修改表在数据库添加字段类对应上 1执行原生sql不常用 import time import threading import sqlalchemy from sqlalchemy import create_engine from sqlalchemy.engine.base import Engineengine create_engine(mysqlpymysql://root:123456127.0.0.1:3306/test?charsetutf8,max_overflow0, # 超过连接池大小外最多创建的连接pool_size5, # 连接池大小pool_timeout30, # 池中没有线程最多等待的时间否则报错pool_recycle-1 # 多久之后对线程池中的线程进行一次连接的回收重置 ) def task(arg):conn engine.raw_connection()cursor conn.cursor()cursor.execute(select * from app01_book)result cursor.fetchall()print(result)cursor.close()conn.close()for i in range(20):t threading.Thread(targettask, args(i,))t.start()2 orm使用 models.py import datetime 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_keyTrue) # id 主键name Column(String(32), indexTrue, nullableFalse) # name列索引不可为空# email Column(String(32), uniqueTrue)#datetime.datetime.now不能加括号加了括号以后永远是当前时间# ctime Column(DateTime, defaultdatetime.datetime.now)# extra Column(Text, nullableTrue)__table_args__ (# UniqueConstraint(id, name, nameuix_id_name), #联合唯一# Index(ix_id_name, name, email), #索引)def init_db():根据类创建数据库表:return:engine create_engine(mysqlpymysql://root:123456127.0.0.1:3306/aaa?charsetutf8,max_overflow0, # 超过连接池大小外最多创建的连接pool_size5, # 连接池大小pool_timeout30, # 池中没有线程最多等待的时间否则报错pool_recycle-1 # 多久之后对线程池中的线程进行一次连接的回收重置)Base.metadata.create_all(engine)def drop_db():根据类删除数据库表:return:engine create_engine(mysqlpymysql://root:123456127.0.0.1:3306/aaa?charsetutf8,max_overflow0, # 超过连接池大小外最多创建的连接pool_size5, # 连接池大小pool_timeout30, # 池中没有线程最多等待的时间否则报错pool_recycle-1 # 多久之后对线程池中的线程进行一次连接的回收重置)Base.metadata.drop_all(engine)if __name__ __main__:# drop_db()init_db()app.py from sqlalchemy.orm import sessionmaker from sqlalchemy import create_engine from models import Users #mysqlpymysql://root127.0.0.1:3306/aaa engine create_engine(mysqlpymysql://root:123456127.0.0.1:3306/aaa, max_overflow0, pool_size5) Connection sessionmaker(bindengine)# 每次执行数据库操作时都需要创建一个Connection con Connection()# ############# 执行ORM操作 ############# obj1 Users(namelqz) con.add(obj1) # 提交事务 con.commit()# 关闭session其实是将连接放回连接池 con.close()3.一对多关系 class Hobby(Base):__tablename__ hobbyid Column(Integer, primary_keyTrue)caption Column(String(50), default篮球)class Person(Base):__tablename__ personnid Column(Integer, primary_keyTrue)name Column(String(32), indexTrue, nullableTrue)# hobby指的是tablename而不是类名uselistFalsehobby_id Column(Integer, ForeignKey(hobby.id))# 跟数据库无关不会新增字段只用于快速链表操作# 类名backref用于反向查询hobbyrelationship(Hobby,backrefpers)4.多对多关系 class Boy2Girl(Base):__tablename__ boy2girlid Column(Integer, primary_keyTrue, autoincrementTrue)girl_id Column(Integer, ForeignKey(girl.id))boy_id Column(Integer, ForeignKey(boy.id))class Girl(Base):__tablename__ girlid Column(Integer, primary_keyTrue)name Column(String(64), uniqueTrue, nullableFalse)class Boy(Base):__tablename__ boyid Column(Integer, primary_keyTrue, autoincrementTrue)hostname Column(String(64), uniqueTrue, nullableFalse)# 与生成表结构无关仅用于查询方便,放在哪个单表中都可以servers relationship(Girl, secondaryboy2girl, backrefboys)5.操作数据表 from sqlalchemy.orm import sessionmaker from sqlalchemy import create_engine from models import Usersengine create_engine(mysqlpymysql://root:123456127.0.0.1:3306/aaa, max_overflow0, pool_size5) Session sessionmaker(bindengine)# 每次执行数据库操作时都需要创建一个session session Session()# ############# 执行ORM操作 ############# obj1 Users(namelqz) session.add(obj1)# 提交事务 session.commit() # 关闭session session.close()6.基于scoped_session实现线程安全 from sqlalchemy.orm import sessionmaker from sqlalchemy import create_engine from sqlalchemy.orm import scoped_session from models import Usersengine create_engine(mysqlpymysql://root:123127.0.0.1:3306/s6, max_overflow0, pool_size5) Session sessionmaker(bindengine) # 线程安全基于本地线程实现每个线程用同一个session # 特殊的scoped_session中有原来方法的Session中的一下方法public_methods (__contains__, __iter__, add, add_all, begin, begin_nested,close, commit, connection, delete, execute, expire,expire_all, expunge, expunge_all, flush, get_bind,is_modified, bulk_save_objects, bulk_insert_mappings,bulk_update_mappings,merge, query, refresh, rollback,scalar )#scoped_session类并没有继承Session,但是却又它的所有方法 session scoped_session(Session) # ############# 执行ORM操作 ############# obj1 Users(namealex1) session.add(obj1)# 提交事务 session.commit() # 关闭session session.close()7.基本增删查改 import time import threadingfrom sqlalchemy.ext.declarative import declarative_base from sqlalchemy import Column, Integer, String, ForeignKey, UniqueConstraint, Index from sqlalchemy.orm import sessionmaker, relationship from sqlalchemy import create_engine from sqlalchemy.sql import textfrom db import Users, Hostsengine create_engine(mysqlpymysql://root:123127.0.0.1:3306/s6, max_overflow0, pool_size5) Session sessionmaker(bindengine)session Session()# ################ 添加 ################obj1 Users(namewupeiqi) session.add(obj1)session.add_all([Users(namelqz),Users(nameegon),Hosts(namec1.com), ]) session.commit() # ################ 删除 ################session.query(Users).filter(Users.id 2).delete() session.commit()# ################ 修改 #################传字典 session.query(Users).filter(Users.id 0).update({name : lqz}) #类似于django的F查询 session.query(Users).filter(Users.id 0).update({Users.name: Users.name 099}, synchronize_sessionFalse) session.query(Users).filter(Users.id 0).update({age: Users.age 1}, synchronize_sessionevaluate) session.commit()# ################ 查询 ################r1 session.query(Users).all() #只取age列把name重命名为xx r2 session.query(Users.name.label(xx), Users.age).all() #filter传的是表达式filter_by传的是参数 r3 session.query(Users).filter(Users.name lqz).all() r4 session.query(Users).filter_by(namelqz).all() r5 session.query(Users).filter_by(namelqz).first() #:value 和:name 相当于占位符用params传参数 r6 session.query(Users).filter(text(id:value and name:name)).params(value224, namefred).order_by(Users.id).all() #自定义查询sql r7 session.query(Users).from_statement(text(SELECT * FROM users where name:name)).params(nameed).all() #增删改都要commit() session.close()8.常用操作 # 条件 ret session.query(Users).filter_by(namelqz).all() #表达式and条件连接 ret session.query(Users).filter(Users.id 1, Users.name eric).all() ret session.query(Users).filter(Users.id.between(1, 3), Users.name eric).all() #注意下划线 ret session.query(Users).filter(Users.id.in_([1,3,4])).all() #~非除。。外 ret session.query(Users).filter(~Users.id.in_([1,3,4])).all() #二次筛选 ret session.query(Users).filter(Users.id.in_(session.query(Users.id).filter_by(nameeric))).all() from sqlalchemy import and_, or_ #or_包裹的都是or条件and_包裹的都是and条件 ret session.query(Users).filter(and_(Users.id 3, Users.name eric)).all() ret session.query(Users).filter(or_(Users.id 2, Users.name eric)).all() ret session.query(Users).filter(or_(Users.id 2,and_(Users.name eric, Users.id 3),Users.extra ! )).all()# 通配符以e开头不以e开头 ret session.query(Users).filter(Users.name.like(e%)).all() ret session.query(Users).filter(~Users.name.like(e%)).all()# 限制用于分页区间 ret session.query(Users)[1:2]# 排序根据name降序排列从大到小 ret session.query(Users).order_by(Users.name.desc()).all() #第一个条件重复后再按第二个条件升序排 ret session.query(Users).order_by(Users.name.desc(), Users.id.asc()).all()# 分组 from sqlalchemy.sql import funcret session.query(Users).group_by(Users.extra).all() #分组之后取最大idid之和最小id ret session.query(func.max(Users.id),func.sum(Users.id),func.min(Users.id)).group_by(Users.name).all() #haviing筛选 ret session.query(func.max(Users.id),func.sum(Users.id),func.min(Users.id)).group_by(Users.name).having(func.min(Users.id) 2).all()# 连表默认用forinkey关联ret session.query(Users, Favor).filter(Users.id Favor.nid).all() #join表默认是inner join ret session.query(Person).join(Favor).all() #isouterTrue 外连表示Person left join Favor没有右连接反过来即可 ret session.query(Person).join(Favor, isouterTrue).all() #打印原生sql aasession.query(Person).join(Favor, isouterTrue) print(aa) # 自己指定on条件连表条件,第二个参数支持on多个条件用and_,同上 ret session.query(Person).join(Favor,Person.idFavor.id, isouterTrue).all() # 组合了解UNION 操作符用于合并两个或多个 SELECT 语句的结果集 #union和union all的区别 q1 session.query(Users.name).filter(Users.id 2) q2 session.query(Favor.caption).filter(Favor.nid 2) ret q1.union(q2).all()q1 session.query(Users.name).filter(Users.id 2) q2 session.query(Favor.caption).filter(Favor.nid 2) ret q1.union_all(q2).all()9.执行原生sql import time import threadingfrom sqlalchemy.ext.declarative import declarative_base from sqlalchemy import Column, Integer, String, ForeignKey, UniqueConstraint, Index from sqlalchemy.orm import sessionmaker, relationship from sqlalchemy import create_engine from sqlalchemy.sql import text from sqlalchemy.engine.result import ResultProxy from db import Users, Hostsengine create_engine(mysqlpymysql://root:123127.0.0.1:3306/s6, max_overflow0, pool_size5) Session sessionmaker(bindengine)session Session()# 查询 # cursor session.execute(select * from users) # result cursor.fetchall()# 添加 cursor session.execute(insert into users(name) values(:value),params{value:lqz}) session.commit() print(cursor.lastrowid)session.close()10.一对多 import time import threadingfrom sqlalchemy.ext.declarative import declarative_base from sqlalchemy import Column, Integer, String, ForeignKey, UniqueConstraint, Index from sqlalchemy.orm import sessionmaker, relationship from sqlalchemy import create_engine from sqlalchemy.sql import text from sqlalchemy.engine.result import ResultProxy from db import Users, Hosts, Hobby, Personengine create_engine(mysqlpymysql://root:123127.0.0.1:3306/s6?charsetutf8, max_overflow0, pool_size5) Session sessionmaker(bindengine) session Session() # 添加session.add_all([Hobby(caption乒乓球),Hobby(caption羽毛球),Person(name张三, hobby_id3),Person(name李四, hobby_id4), ])person Person(name张九, hobbyHobby(caption姑娘)) session.add(person) #添加二 hb Hobby(caption人妖) hb.pers [Person(name文飞), Person(name博雅)] session.add(hb)session.commit() # 使用relationship正向查询v session.query(Person).first() print(v.name) print(v.hobby.caption) # 使用relationship反向查询v session.query(Hobby).first() print(v.caption) print(v.pers)#方式一自己链表 # person_listsession.query(models.Person.name,models.Hobby.caption).join(models.Hobby,isouterTrue).all() person_listsession.query(models.Person,models.Hobby).join(models.Hobby,isouterTrue).all() for row in person_list:# print(row.name,row.caption)print(row[0].name,row[1].caption)#方式二通过relationshipperson_listsession.query(models.Person).all() for row in person_list:print(row.name,row.hobby.caption) #查询喜欢姑娘的所有人 objsession.query(models.Hobby).filter(models.Hobby.id1).first() personsobj.pers print(persons) session.close()11.多对多 import time import threadingfrom sqlalchemy.ext.declarative import declarative_base from sqlalchemy import Column, Integer, String, ForeignKey, UniqueConstraint, Index from sqlalchemy.orm import sessionmaker, relationship from sqlalchemy import create_engine from sqlalchemy.sql import text from sqlalchemy.engine.result import ResultProxy from db import Users, Hosts, Hobby, Person, Group, Server, Server2Groupengine create_engine(mysqlpymysql://root:123127.0.0.1:3306/s6?charsetutf8, max_overflow0, pool_size5) Session sessionmaker(bindengine) session Session() # 添加session.add_all([Server(hostnamec1.com),Server(hostnamec2.com),Group(nameA组),Group(nameB组), ]) session.commit()s2g Server2Group(server_id1, group_id1) session.add(s2g) session.commit()gp Group(nameC组) gp.servers [Server(hostnamec3.com),Server(hostnamec4.com)] session.add(gp) session.commit()ser Server(hostnamec6.com) ser.groups [Group(nameF组),Group(nameG组)] session.add(ser) session.commit() # 使用relationship正向查询v session.query(Group).first() print(v.name) print(v.servers) # 使用relationship反向查询v session.query(Server).first() print(v.hostname) print(v.groups) session.close()12.其它 import time import threadingfrom sqlalchemy.ext.declarative import declarative_base from sqlalchemy import Column, Integer, String, ForeignKey, UniqueConstraint, Index from sqlalchemy.orm import sessionmaker, relationship from sqlalchemy import create_engine from sqlalchemy.sql import text, func from sqlalchemy.engine.result import ResultProxy from db import Users, Hosts, Hobby, Person, Group, Server, Server2Groupengine create_engine(mysqlpymysql://root:123127.0.0.1:3306/s6?charsetutf8, max_overflow0, pool_size5) Session sessionmaker(bindengine) session Session()# 关联子查询:correlate(Group)表示跟Group表做关联as_scalar相当于对该sql加括号用于放在后面当子查询 subqry session.query(func.count(Server.id).label(sid)).filter(Server.id Group.id).correlate(Group).as_scalar() result session.query(Group.name, subqry)SELECT group.name AS group_name, (SELECT count(server.id) AS sid FROM server WHERE server.id group.id) AS anon_1 FROM groupselect * from tb where id in [select id from xxx];select id,name,#必须保证此次查询只有一个值(select max(id) from xxx) as mid from tb例如第三个字段只能有一个值 id name mid 1 lqz 12 不合理 2 egon 2成绩表 id sid cid score 1 1 物理 99 2 1 化学 88 3 2 物理 95学生表 id name 每个学生总分数 1 xx 88 2 yy 77select idname, (select avr(score) from 成绩表 where 成绩表.sid学生表.id) as x from 学生表 subqry session.query(func.count(成绩表.scort).label(sc)).filter(学生表.id 成绩表.sid).correlate(学生表).as_scalar() result session.query(学生表.name, subqry)# 原生SQL# 查询 cursor session.execute(select * from users) result cursor.fetchall()# 添加 cursor session.execute(insert into users(name) values(:value),params{value:wupeiqi}) session.commit() print(cursor.lastrowid) session.close()13.Flask-SQLAlchemy flask和SQLAchemy的管理者通过他把他们做连接 db SQLAlchemy()- 包含配置- 包含ORM基类- 包含create_all- engine- 创建连接离线脚本创建表 详见代码 flask-migrate python3 manage.py db init 初始化只执行一次 python3 manage.py db migrate 等同于 makemigartions python3 manage.py db upgrade 等同于migrate
http://www.zqtcl.cn/news/969559/

相关文章:

  • 如何购买虚拟主机做网站企业查名
  • 动易网站默认密码网站怎么做 吸引人
  • 站长工具国产2023二级建造师证书查询官方网站
  • 微信小程序联盟网站北京网站建设华大
  • 人事怎么做招聘网站比对分析crm管理系统 一般包含
  • 林业网站建设有哪些北京微信小程序开发
  • ppt素材网站建设流程图网站开发原型工具
  • 乡镇医院网站建设成都市企业网站建设
  • 网站编辑如何做原创网站中英切换实例
  • 哈尔滨道外区建设局官方网站wordpress简称
  • 教师网站建设企业实践总结华为应用商店下载安装
  • 常见的网站空间服务商资阳建设局网站
  • 惠通网站建设湖南seo优化服务
  • 网站建设价格标准wordpress花钱吗
  • 龙门惠州网站建设苏州公司注册查询
  • 城阳网站设计自建网站与平台建站
  • 网站建设文字教程wordpress xml生成
  • wordpress修改注册表广西seo网站
  • 新兴网站建设招商网站建设多少钱
  • 商城网站页面模板网页设计的首页如何设计官网
  • 我的世界做外国壁纸网站嘉兴推广公司
  • 网站制作在哪里找怎样上传wordpress模板
  • 网站设计时尚博业建站网
  • 网站建设前期如何规划免费的源代码分享有哪些网站
  • 长春网络培训seo
  • 江苏网站开发建设电话公司网站需求说明书
  • 河北建设厅网站首页个人或主题网站建设实验体会
  • 网站后台文章栏目做外汇消息面的网站
  • 白酒营销网站用asp.net做简易网站
  • 做seo需要建网站吗上传PDF到wordpress网站