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

加强网站微信信息编辑队伍建设成都周边旅游景点大全

加强网站微信信息编辑队伍建设,成都周边旅游景点大全,互动科技 网站建设,厂房设计彩笔激流勇退。 1. 简介 ORM#xff0c;对象关系映射。简单来说#xff0c;ORM将数据库中的表与面向对象中的类建立了一种对应关系。这样#xff0c;我们要操作数据库#xff0c;表#xff0c;记录就可以直接通过操作类或者类实例来完成。 SQLAlchemy 是目前python中最…彩笔激流勇退。 1. 简介 ORM对象关系映射。简单来说ORM将数据库中的表与面向对象中的类建立了一种对应关系。这样我们要操作数据库表记录就可以直接通过操作类或者类实例来完成。 SQLAlchemy 是目前python中最垃圾的 ORM框架, 功能全面, 使用复杂。 Flask-SQLAlchemy 是一个为 Flask 应用增加 SQLAlchemy 支持的扩展把原本pymysql几句话就能搞定的事情整成抽象的继承的封装的多态的更适合高级程序员体质的负离子保温杯。 抛开兼容性不谈Flask-SQLAlchemy无疑是磨练程序员改bug的磨刀石是检验程序员记忆能力的试金石是凝结了人类精华的草酸钙结石。 常用字段类型 类型名python接收类型mysql生成类型说明Integerintint整型Floatfloatfloat浮点型Numeric(5,2)decimal.Decimaldecimal(5,2)Booleanbooltinyint整型只占1个字节Textstrtext文本类型最大64KBLongTextstrlongtext文本类型最大4GBStringstrvarchar变长字符串必须限定长度Datedatetime.datedate日期DateTimedatetime.datetimedatetime日期和时间Timedatetime.timetime时间TIMESTAMPdatetime.datetimeTIMESTAMP时间戳可以用text(‘now()’)赋值 常用的字段选项 选项名说明primary_keyTrue则该字段为表的主键默认自增uniqueTrue则这列设置唯一nullableFalse则这列设置非空default为这列设置默认值不作用在数据库server_default值必须是字符串格式作用在数据库indexTrue则为这列创建索引提高查询效率 如果没有给对应字段的类属性设置default参数, 且添加数据时也没有给该字段赋值, 则sqlalchemy会给该字段设置默认值 None。 常见命令 db.create_all() #创建所有表 db.drop_all() #删除所有表2. 创建表 pip install pymysql pip install flask-sqlalchemy 数据库URL(连接地址)格式: 协议名://用户名:密码数据库IP:端口号/数据库名 main.py ​ 在下面代码中我们使用了 with app.app_context(): 语句来确保当前应用实例的操作db.create_all() 是在flask应用上下文中被调用的。 from app import * from models import Userapp.route(/,methods[GET,POST]) def login():print(db)return hello worldif __name__ __main__:with app.app_context():db.create_all()#创建表app.run(host0.0.0.0,port9901,debug1)modules.py 表名默认为类名小写, 可以通过 __tablename__类属性 进行修改 from app import dbclass User(db.Model):# User表__tablename__ t_userid db.Column(db.Integer,primary_keyTrue) # 必须要有主键存在namedb.Column(db.String(20),nullableTrue)# 可空agedb.Column(db.SmallInteger)genderdb.Column(db.Boolean)birthdaydb.Column(db.Date)对应MySQL语句 CREATE TABLE t_user (id int NOT NULL AUTO_INCREMENT,name varchar(20) COLLATE utf8mb4_general_ci DEFAULT NULL,age smallint DEFAULT NULL,gender tinyint(1) DEFAULT NULL,birthday date DEFAULT NULL,PRIMARY KEY (id) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COLLATEutf8mb4_general_ci;app.py from flask import Flask,url_for,request,render_template,make_response,redirect,jsonify from flask_sqlalchemy import SQLAlchemy app Flask(__name__) # 用本脚本名实例化Flask对象 # 设置数据库连接地址 app.config[SQLALCHEMY_DATABASE_URI] mysqlpymysql://root:123456127.0.0.1:3306/test1# 是否追踪数据库修改(开启后会触发一些钩子函数) 一般不开启, 会影响性能 app.config[SQLALCHEMY_TRACK_MODIFICATIONS] False# 是否显示底层执行的SQL语句 app.config[SQLALCHEMY_ECHO] True# 初始化组件对象, 直接关联Flask应用 db SQLAlchemy(app)3. 数据表简单查询 userUser.query 说明user.filter_by(id1)只能等值查询,使用user.filter(User.id1)条件查询用 use.filter 参数与运算符说明and_(User.id1,User.age99)与or_(User.id1,User.age99)或~(User.id1)非! NoneUser.name.like(%a%)模糊查询User.id.in_((1,2,5))范围查询User.id.between(1,3)[1,3] if __name__ __main__:with app.app_context():db.create_all()userUser.queryprint(user)#显示sql语句, 返回Query对象print(user.all())#[User 1, User 2, User 3],每个元素都是models.User类型print(user.count()) #返回query中的Model对象数量print(user.filter_by(age30,id1)) #显示SQL语句, 返回Query对象内部条件为交集4. 映射查询 db.session.query 映射查询在SQLAlchemy中可以通过session对象的query方法完成。 注意关键字书写顺序 db.session.query().filter().group_by().having().order_by().paginate().all()if __name__ __main__:with app.app_context():db.create_all()querydb.session.query(User) #class flask_sqlalchemy.query.Queryprint(query.filter(User.id1).all())# [User 2, User 3]query2db.session.query(User.id,User.name)print(query2.filter(User.age99).all())# [(2, tom)]app.run(host0.0.0.0,port9901,debug1)5. 排序 order_by from sqlalchemy import desc if __name__ __main__:with app.app_context():db.create_all()query db.session.query(User.id, User.name,User.age)print(query.order_by(User.age).all()) # 默认升序排序,asc()print(query.order_by(desc(User.age)).all()) # 降序排序print(query.order_by(User.age,User.id).all()) # 先排age后排idapp.run(host0.0.0.0, port9901, debug1)# 看起来是一个阻塞函数6. 聚合函数 数据库先添加一个age为30的记录。 from sqlalchemy import func 聚合函数说明count()记录数量sum()加和总值avg()平均值max()最大值min()最小值 if __name__ __main__:with app.app_context():db.create_all()query db.session.query(func.max(User.age),func.avg(User.age))#相当于 SELECT max(age) , avg(age) FROM t_userprint(query.all()) # [(99, Decimal(51.0000))]app.run(host0.0.0.0, port9901, debug1)7. 分组查询 group_by if __name__ __main__:with app.app_context():db.create_all()query db.session.query(func.count(User.id))print(query.group_by(User.age).all()) # [(2,), (1,), (1,)]app.run(host0.0.0.0, port9901, debug1)8. 增删改 flask开了debug模式删除数据会导致main函数重新执行给爷整笑了。 if __name__ __main__:with app.app_context():db.create_all()#更新u db.session.query(User.id1)# 查询主键为1的记录u.nameJack#db.session.rollback() 事务回滚默认遇到错误自动回滚db.session.commit()# 事务提交#删除u2db.session.query(User).filter(User.id6).all() # User 模型的实例if len(u2)!0:db.session.delete(u2[0])db.session.commit() # 事务提交#增加u3User(id7,namelihua,age35,gender1,birthday2077-1-1)db.session.add(u3)#db.session.add_all([u1,u2,u3]) 一次添加多个db.session.commit()app.run(host0.0.0.0, port9901, debug0)# debug1时上面的delete操作会执行多次# 大概是是检测到了文件变化重启了一次main函数???9. 分页查询 paginate 分页查询不老老实实用limit非要整个paginate装什么高大上。 if __name__ __main__:with app.app_context():db.create_all()pgdb.session.query(User).paginate(page2,per_page2)# QueryPagination objectprint(pg.items)#[User 3, User 4],当前页数据print(pg.pages) #3 ,一共三页for i in pg.iter_pages(): #迭代Pagination.iter_pages对象print(i)#1 2 3app.run(host0.0.0.0, port9901, debug0)10. 原生sql支持 if __name__ __main__:with app.app_context():db.create_all()statementtext(select * from t_user where id :id).params(id1)querydb.session.query(User).from_statement(statement)print(query.all())# [User 2, User 3, User 4, User 7]#最傻逼的地方来了新版本下面语句不支持# statement2 text(select max(id) as mmid,max(age) as mage from t_user where id :id).params(id2)# query2 db.session.query(mmid,mage).from_statement(statement2)# sqlalchemy.exc.ArgumentError# 感觉不如直接pymysqlsqltext(select max(id) as mmid,max(age) as mage from t_user where id :id)resultdb.session.execute(sql,{id:2})# CursorResult object#print(result.fetchall())# [(7, 45)] 如果这里获取了下面就获取不了有点类似游标后移导致没数据读for i in result:print(i)# (7, 45)app.run(host0.0.0.0, port9901, debug0)参考 flask框架与mysql开发入门到实践 白菜爱科技
http://www.zqtcl.cn/news/190631/

相关文章:

  • 织梦网站多少钱广告多的网站
  • 济南网站建站模板深圳南园网站建设
  • 国家免费技能培训官网白杨seo博客
  • 福州seo网站建设微服务网站
  • 网站宽度 像素长沙电商运营培训
  • 备案上个人网站和企业网站的区别app开发多少钱一个
  • 有限公司网站建设 中企动力佛山培训机构招生方案
  • 扫黄打非网站建设专业的高端网站制作公司
  • 做自媒体发视频用哪些网站江西网站建设哪家好
  • wordpress用户列表南宁百度seo排名优化
  • 做网站时如何写接口文档上海网站设计建设公司
  • 网站小图标怎么制作平面设计素材网站推荐
  • 多元网络兰州网站建设惠州网页建站模板
  • 网站建设中首页模板下载网页制作模板保存
  • 宁夏做网站的江苏网站建设的案例展示
  • 网站功能需求文档如何免费域名注册
  • 推广网站的软件包头移动的网站建设
  • 自己制作音乐的软件免费上海seo怎么优化
  • 学vue可以做pc网站网站站长统计怎么弄
  • 做物流的可以在那些网站找客户大淘客网站建设app
  • 石家庄兼职做网站dedecms做视频网站
  • 优化公司怎么优化网站的网站 意义
  • 唯品会一家专门做特卖的网站手机版招聘网站开发技术维护
  • 做短租哪个网站wordpress 4.7
  • 网站换空间 site网站域没到期不能续费吗
  • 找别人做网站要考虑哪些网站导航条设计欣赏
  • mvc网站开发实例wordpress雪人主题2.0
  • 红色好看的网站中山网站建设工作室
  • 如何做喊单网站flask公司网站开发
  • 简单个人网站制作流程自己怎么做卖服装的网站