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

建筑资料免费下载网站东莞没有网站的公司

建筑资料免费下载网站,东莞没有网站的公司,双通网络网站建设价格,公司网站建设设计Flask 数据库集成完全指南#xff1a;Flask-SQLAlchemy 实践 1. 引言 数据库是现代Web应用的核心组件#xff0c;Flask通过Flask-SQLAlchemy扩展提供了强大的数据库集成能力。本文将全面介绍如何在Flask应用中使用Flask-SQLAlchemy进行数据库操作#xff0c;涵盖从基础配置…Flask 数据库集成完全指南Flask-SQLAlchemy 实践 1. 引言 数据库是现代Web应用的核心组件Flask通过Flask-SQLAlchemy扩展提供了强大的数据库集成能力。本文将全面介绍如何在Flask应用中使用Flask-SQLAlchemy进行数据库操作涵盖从基础配置到高级查询模式的各个方面。 2. Flask-SQLAlchemy基础配置 2.1 安装与初始化 pip install flask-sqlalchemyfrom flask import Flask from flask_sqlalchemy import SQLAlchemyapp Flask(__name__) app.config[SQLALCHEMY_DATABASE_URI] sqlite:///site.db app.config[SQLALCHEMY_TRACK_MODIFICATIONS] False db SQLAlchemy(app)关键配置 SQLALCHEMY_DATABASE_URI数据库连接字符串 SQLite: sqlite:///database.dbPostgreSQL: postgresql://user:passwordlocalhost/mydatabaseMySQL: mysql://user:passwordlocalhost/mydatabase SQLALCHEMY_TRACK_MODIFICATIONS禁用事件系统以提升性能 2.2 应用工厂模式集成 from flask_sqlalchemy import SQLAlchemydb SQLAlchemy()def create_app():app Flask(__name__)app.config[SQLALCHEMY_DATABASE_URI] sqlite:///site.dbdb.init_app(app)return app3. 定义数据模型 3.1 基础模型定义 class User(db.Model):id db.Column(db.Integer, primary_keyTrue)username db.Column(db.String(80), uniqueTrue, nullableFalse)email db.Column(db.String(120), uniqueTrue, nullableFalse)def __repr__(self):return fUser {self.username}常用字段类型 db.Integer整数db.String(size)字符串db.Text长文本db.DateTime日期时间db.Boolean布尔值db.Float浮点数 3.2 关系模型 class Post(db.Model):id db.Column(db.Integer, primary_keyTrue)title db.Column(db.String(100), nullableFalse)content db.Column(db.Text, nullableFalse)user_id db.Column(db.Integer, db.ForeignKey(user.id), nullableFalse)author db.relationship(User, backrefdb.backref(posts, lazyTrue))class Comment(db.Model):id db.Column(db.Integer, primary_keyTrue)text db.Column(db.Text, nullableFalse)post_id db.Column(db.Integer, db.ForeignKey(post.id))user_id db.Column(db.Integer, db.ForeignKey(user.id))post db.relationship(Post, backrefdb.backref(comments, lazyTrue))user db.relationship(User, backrefdb.backref(comments, lazyTrue))关系类型 db.ForeignKey外键约束db.relationship定义模型间关系backref反向引用lazy加载策略(select, joined, dynamic等) 4. 数据库操作 4.1 创建数据库表 with app.app_context():db.create_all()4.2 增删改查(CRUD)操作 创建记录 new_user User(usernamejohn, emailjohnexample.com) db.session.add(new_user) db.session.commit()查询记录 # 获取所有用户 users User.query.all()# 获取单个用户 user User.query.get(1)# 条件查询 admin User.query.filter_by(usernameadmin).first()# 复杂查询 recent_users User.query.order_by(User.id.desc()).limit(5).all()更新记录 user User.query.get(1) user.email newexample.com db.session.commit()删除记录 user User.query.get(1) db.session.delete(user) db.session.commit()5. 高级查询技巧 5.1 分页查询 page request.args.get(page, 1, typeint) per_page 10 pagination Post.query.paginate(pagepage, per_pageper_page) posts pagination.items分页对象属性 items当前页记录page当前页码per_page每页记录数total总记录数pages总页数 5.2 聚合查询 from sqlalchemy import func# 计数 user_count db.session.query(func.count(User.id)).scalar()# 分组统计 post_counts db.session.query(User.username,func.count(Post.id) ).join(Post).group_by(User.id).all()5.3 复杂过滤 from sqlalchemy import or_# 多条件查询 search flask posts Post.query.filter(or_(Post.title.contains(search),Post.content.contains(search)) ).all()6. 数据库迁移 6.1 Flask-Migrate配置 pip install flask-migratefrom flask_migrate import Migrateapp Flask(__name__) # ...其他配置... db SQLAlchemy(app) migrate Migrate(app, db)6.2 迁移命令 # 初始化迁移仓库 flask db init# 生成迁移脚本 flask db migrate -m initial migration# 应用迁移 flask db upgrade# 回滚迁移 flask db downgrade7. 性能优化 7.1 连接池配置 app.config[SQLALCHEMY_ENGINE_OPTIONS] {pool_size: 10,pool_recycle: 300,pool_pre_ping: True }7.2 批量操作 # 批量插入 users [User(usernamefuser{i}) for i in range(100)] db.session.bulk_save_objects(users) db.session.commit()# 批量更新 User.query.filter(User.id 10).update({active: False}) db.session.commit()7.3 延迟加载与预加载 # 延迟加载(默认) posts User.query.get(1).posts # 额外查询# 预加载 users User.query.options(db.joinedload(User.posts)).all()8. 测试与调试 8.1 测试数据库配置 import pytest from app import create_app, db as _dbpytest.fixture def app():app create_app({TESTING: True, SQLALCHEMY_DATABASE_URI: sqlite:///:memory:})with app.app_context():_db.create_all()yield app_db.drop_all()pytest.fixture def client(app):return app.test_client()8.2 SQL日志调试 import logging logging.basicConfig() logging.getLogger(sqlalchemy.engine).setLevel(logging.INFO)9. 安全最佳实践 9.1 防止SQL注入 # 安全 - 使用ORM User.query.filter_by(usernamerequest.form[username])# 危险 - 直接拼接SQL query fSELECT * FROM user WHERE username {request.form[username]}9.2 敏感数据加密 from werkzeug.security import generate_password_hash, check_password_hashclass User(db.Model):# ...password_hash db.Column(db.String(128))propertydef password(self):raise AttributeError(password is not a readable attribute)password.setterdef password(self, password):self.password_hash generate_password_hash(password)def verify_password(self, password):return check_password_hash(self.password_hash, password)10. 总结与最佳实践 10.1 关键要点总结 模型设计 合理规划表结构与关系使用合适的字段类型和约束为常用查询添加索引 查询优化 使用预加载减少查询次数只查询需要的字段合理使用缓存 事务管理 保持事务短小正确处理回滚避免长时间持有事务 10.2 推荐项目结构 /myapp/models__init__.py # 导出所有模型user.py # 用户模型post.py # 文章模型/migrations # 迁移脚本/testsconftest.py # 测试配置test_models.py # 模型测试app.py # 应用工厂config.py # 配置10.3 最佳实践建议 配置分离 开发/生产环境使用不同数据库敏感信息从环境变量读取 代码组织 将模型放在单独模块业务逻辑与数据访问分离使用服务层封装复杂操作 性能监控 记录慢查询定期优化数据库监控连接池使用 通过合理运用这些技术和模式您可以构建出高效、可靠且易于维护的Flask数据库应用。记住良好的数据库设计是应用性能的基石值得投入时间进行规划和优化。
http://www.pierceye.com/news/144973/

相关文章:

  • 网站安全管理制度建设下载网站建设公司哪家强
  • 网络直播网站开发长春市城乡建设部网站
  • 自己搭建服务器做网站要多久汕头网络推广电话
  • 除了昵图网还有什么做图网站深圳房地产网站开发
  • 网站建设哪家go好重庆怎样网站推广
  • 松江网站建设哪家好wordpress去掉父分类
  • 网站 云建站设计网站推荐室内
  • 网站怎么自适应屏幕云南建设投资集团网站
  • qq中心官方网站两个网站如何使用一个虚拟主机
  • 泰安网站制作推荐电脑网页游戏排行榜前十名
  • 石家庄最好的网站建设公司上海都有哪些企业公司
  • 网站的链接要怎么做官网制作公司
  • 学生成绩管理系统 网站建设站长之家源码下载
  • wap多用户网站微信端的网站开发python
  • 网络营销中自建网站厦门湖里区建设局网站
  • 公司建设网站的申请信用卡做盗版影视网站违法吗
  • 商务网站推广技巧包括什么移动网站开发教程
  • 北京网站备案域名温州制作网站公司
  • 门户网站建设工作流程做网站的背景图片
  • 用360云盘做网站简洁个人博客网站模板
  • 沈阳网站建设 网络服务wordpress媒体库图片不显示
  • 什么公司做网站出名大商创 多用户商城
  • 学校网站管理网站制作开发及优化是什么
  • wordpress获取所有标签页那些网站用不着做优化
  • 大有网网站现在较为常用的网站开发技术
  • 太原建站公司有哪些网站统计 wordpress
  • 网站轮播图怎么保存盛锡福网站
  • 做网站用百度浏览器网络营销案例分析试题
  • 当建设部门网站南宁网站的优化
  • wordpress访问文件夹成都黑帽seo