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

sdk广告接入seo推广系统排名榜

sdk广告接入,seo推广系统排名榜,金华市住房和城乡建设厅网站,绿地建设集团网站目录 Flask数据库操作一、数据库基础1.1 关系型数据库与非关系型数据库选择数据库 二、Flask-SQLAlchemy2.1 安装 Flask-SQLAlchemy2.2 创建数据库模型2.2.1 创建 Flask 应用2.2.2 定义模型 2.3 执行 CRUD 操作2.3.1 创建(Create)2.3.2 读取(…

目录

  • Flask数据库操作
    • 一、数据库基础
      • 1.1 关系型数据库与非关系型数据库
        • 选择数据库
    • 二、Flask-SQLAlchemy
      • 2.1 安装 Flask-SQLAlchemy
      • 2.2 创建数据库模型
        • 2.2.1 创建 Flask 应用
        • 2.2.2 定义模型
      • 2.3 执行 CRUD 操作
        • 2.3.1 创建(Create)
        • 2.3.2 读取(Read)
        • 2.3.3 更新(Update)
        • 2.3.4 删除(Delete)
      • 2.4 关系建模(一对多、多对多关系)
    • 三、迁移工具
      • 3.1 安装 Flask-Migrate
      • 3.2 配置 Flask-Migrate
      • 3.3 初始化迁移环境
      • 3.4 创建迁移
      • 3.5 应用迁移
      • 3.6 管理数据库版本
    • 四、完整示例
    • 总结

Flask数据库操作

在现代应用程序中,数据库操作是必不可少的。在本教程中,我们将详细学习关系型数据库与非关系型数据库的基本概念,选择合适的数据库,然后使用 Flask 的扩展工具 Flask-SQLAlchemy 和 Flask-Migrate 来执行 CRUD 操作和数据迁移。你将通过丰富的案例来理解数据库模型的创建和关系建模。

一、数据库基础

1.1 关系型数据库与非关系型数据库

关系型数据库(Relational Database)是指以表格形式存储数据的数据库。它使用结构化查询语言(SQL)来操作数据。常见的关系型数据库有 PostgreSQL、MySQL、SQLite 等。

非关系型数据库(NoSQL Database)使用灵活的数据模型,可以是键值对、文档、图形或列存储。常见的 non-SQL 数据库有 MongoDB、Redis、Cassandra 等。

选择数据库

在本教程中,我们将采用 SQLite 作为开发阶段的数据库,因为它轻量级、易于使用且不需要额外的配置。在生产环境中,你可以考虑使用 PostgreSQL 或 MySQL 等成熟的关系型数据库。

二、Flask-SQLAlchemy

2.1 安装 Flask-SQLAlchemy

首先,确保你已安装 Flask-SQLAlchemy:

pip install Flask-SQLAlchemy

2.2 创建数据库模型

我们将创建一个简单的博客应用,具有用户和文章两个模型。

2.2.1 创建 Flask 应用

首先,创建一个新的 Flask 应用并设置数据库连接:

import os
from flask import Flask
from flask_sqlalchemy import SQLAlchemyapp = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///blog.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db = SQLAlchemy(app)
2.2.2 定义模型

接下来,我们将定义用户和文章的模型。每个用户可以有多篇文章,这意味着我们将实现一对多关系。

class User(db.Model):id = db.Column(db.Integer, primary_key=True)username = db.Column(db.String(80), unique=True, nullable=False)articles = db.relationship('Article', backref='author', lazy=True)class Article(db.Model):id = db.Column(db.Integer, primary_key=True)title = db.Column(db.String(200), nullable=False)content = db.Column(db.Text, nullable=False)user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)def __repr__(self):return f'<Article {self.title}>'

在这里,我们为 User 模型和 Article 模型创建了表,其中 articles 是与 User 一对多关系的反向引用,user_id 是外键。

2.3 执行 CRUD 操作

现在,我们来看看如何执行 CRUD 操作。

2.3.1 创建(Create)

创建用户和文章,这是一个简单的示例:

@app.route('/create_user/<username>')
def create_user(username):new_user = User(username=username)db.session.add(new_user)db.session.commit()return f'User {username} created!'@app.route('/create_article/<user_id>/<title>/<content>')
def create_article(user_id, title, content):new_article = Article(title=title, content=content, user_id=user_id)db.session.add(new_article)db.session.commit()return f'Article {title} created!'
2.3.2 读取(Read)

读取用户及其文章的信息:

@app.route('/user/<int:user_id>')
def get_user_articles(user_id):user = User.query.get(user_id)if user:articles = user.articlesreturn f'User: {user.username}, Articles: {", ".join([a.title for a in articles])}'return "User not found"
2.3.3 更新(Update)

更新用户或文章的信息:

@app.route('/update_user/<int:user_id>/<new_username>')
def update_user(user_id, new_username):user = User.query.get(user_id)if user:user.username = new_usernamedb.session.commit()return f'User ID {user_id} updated to {new_username}!'return "User not found"
2.3.4 删除(Delete)

删除用户或文章:

@app.route('/delete_user/<int:user_id>')
def delete_user(user_id):user = User.query.get(user_id)if user:db.session.delete(user)db.session.commit()return f'User ID {user_id} deleted!'return "User not found"

2.4 关系建模(一对多、多对多关系)

我们已经实现了一对多的关系,如果要实现多对多关系,可以创建一个中间表。比如我们可以创建一个 Tag 模型,一个文章可以有多个标签,而一个标签可以应用于多篇文章。

article_tags = db.Table('article_tags',db.Column('article_id', db.Integer, db.ForeignKey('article.id')),db.Column('tag_id', db.Integer, db.ForeignKey('tag.id'))
)class Tag(db.Model):id = db.Column(db.Integer, primary_key=True)name = db.Column(db.String(50), unique=True, nullable=False)articles = db.relationship('Article', secondary=article_tags, lazy='subquery',backref=db.backref('tags', lazy=True))

三、迁移工具

3.1 安装 Flask-Migrate

Flask-Migrate 是用于处理数据库迁移的工具,建立在 Alembic 的基础之上。

安装 Flask-Migrate:

pip install Flask-Migrate

3.2 配置 Flask-Migrate

在 Flask 应用中集成 Flask-Migrate:

from flask_migrate import Migratemigrate = Migrate(app, db)

3.3 初始化迁移环境

首先,初始化迁移环境:

flask db init

3.4 创建迁移

如果你已经定义了模型,可以创建迁移文件:

flask db migrate -m "Initial migration."

3.5 应用迁移

应用迁移到数据库:

flask db upgrade

3.6 管理数据库版本

你可以使用以下命令查看当前的数据库版本:

flask db current

如果你更改了模型,需要更新数据库,可以重复执行 flask db migrateflask db upgrade

四、完整示例

将上述代码整合在一个应用中:

import os
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrateapp = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///blog.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db = SQLAlchemy(app)
migrate = Migrate(app, db)class User(db.Model):# 用户模型id = db.Column(db.Integer, primary_key=True)username = db.Column(db.String(80), unique=True, nullable=False)articles = db.relationship('Article', backref='author', lazy=True)class Article(db.Model):# 文章模型id = db.Column(db.Integer, primary_key=True)title = db.Column(db.String(200), nullable=False)content = db.Column(db.Text, nullable=False)user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)class Tag(db.Model):# 标签模型id = db.Column(db.Integer, primary_key=True)name = db.Column(db.String(50), unique=True, nullable=False)articles = db.relationship('Article', secondary=article_tags, lazy='subquery',backref=db.backref('tags', lazy=True))@app.route('/create_user/<username>')
def create_user(username):# 创建用户...@app.route('/create_article/<user_id>/<title>/<content>')
def create_article(user_id, title, content):# 创建文章...# 添加更多的路由和功能if __name__ == '__main__':db.create_all()  # 创建所有表app.run(debug=True)

总结

在本教程中,我们学习了如何使用 Flask-SQLAlchemy 和 Flask-Migrate 进行数据库操作,从基础的模型定义到 CRUD 操作,再到数据库迁移。希望此教程能帮助你更好地理解 Flask 中的数据库操作,为你后续的项目提供帮助。随着你的项目复杂度增加,掌握这些工具和技巧将极大地提升开发效率。


文章转载自:
http://dinncopolycentric.tqpr.cn
http://dinncomultifold.tqpr.cn
http://dinncojidda.tqpr.cn
http://dinnconuncupative.tqpr.cn
http://dinncocarryall.tqpr.cn
http://dinncotrisect.tqpr.cn
http://dinncoinwind.tqpr.cn
http://dinncoaphorism.tqpr.cn
http://dinncocongenital.tqpr.cn
http://dinncoautofilter.tqpr.cn
http://dinncomentation.tqpr.cn
http://dinncocylindromatous.tqpr.cn
http://dinncoadventurous.tqpr.cn
http://dinncounconcernedly.tqpr.cn
http://dinncovijayavada.tqpr.cn
http://dinncounannealed.tqpr.cn
http://dinncotorpidness.tqpr.cn
http://dinncohenna.tqpr.cn
http://dinncowillard.tqpr.cn
http://dinncodelict.tqpr.cn
http://dinncounilingual.tqpr.cn
http://dinncobiosphere.tqpr.cn
http://dinncovandyked.tqpr.cn
http://dinnconachus.tqpr.cn
http://dinncostratopause.tqpr.cn
http://dinncoeighth.tqpr.cn
http://dinncomonal.tqpr.cn
http://dinncounappropriated.tqpr.cn
http://dinncoinclusively.tqpr.cn
http://dinncoconfess.tqpr.cn
http://dinncobotany.tqpr.cn
http://dinncougaritic.tqpr.cn
http://dinncoconfrontationist.tqpr.cn
http://dinncohomicidal.tqpr.cn
http://dinncopoland.tqpr.cn
http://dinncosultanate.tqpr.cn
http://dinncouteri.tqpr.cn
http://dinncoendodermis.tqpr.cn
http://dinncoyester.tqpr.cn
http://dinncoinexact.tqpr.cn
http://dinncoomnitude.tqpr.cn
http://dinncopicture.tqpr.cn
http://dinncoanamorphoscope.tqpr.cn
http://dinncoadnexa.tqpr.cn
http://dinncomelt.tqpr.cn
http://dinncounfluctuating.tqpr.cn
http://dinncoperform.tqpr.cn
http://dinncoalgometry.tqpr.cn
http://dinncowoomera.tqpr.cn
http://dinncopuseyite.tqpr.cn
http://dinncotachyphylaxis.tqpr.cn
http://dinncoprematurely.tqpr.cn
http://dinncoantituberculosis.tqpr.cn
http://dinncofoumart.tqpr.cn
http://dinncodetainment.tqpr.cn
http://dinnconobiliary.tqpr.cn
http://dinncorecallable.tqpr.cn
http://dinncoperle.tqpr.cn
http://dinncohypocorism.tqpr.cn
http://dinncosekondi.tqpr.cn
http://dinncofecula.tqpr.cn
http://dinncoincommunicado.tqpr.cn
http://dinncoredone.tqpr.cn
http://dinncopreinvasion.tqpr.cn
http://dinncotrichotomy.tqpr.cn
http://dinncopepper.tqpr.cn
http://dinnconucleocapsid.tqpr.cn
http://dinncosuperb.tqpr.cn
http://dinncosura.tqpr.cn
http://dinncoaeolotropy.tqpr.cn
http://dinncoendotoxin.tqpr.cn
http://dinncocelerity.tqpr.cn
http://dinncocurrency.tqpr.cn
http://dinncobagged.tqpr.cn
http://dinncoestradiol.tqpr.cn
http://dinncohorunspatio.tqpr.cn
http://dinncokendal.tqpr.cn
http://dinncoetching.tqpr.cn
http://dinncochimaera.tqpr.cn
http://dinncoincubous.tqpr.cn
http://dinncodeteriorate.tqpr.cn
http://dinncoradiocast.tqpr.cn
http://dinncopadre.tqpr.cn
http://dinncolipolysis.tqpr.cn
http://dinnconeuropathology.tqpr.cn
http://dinncopowdery.tqpr.cn
http://dinncostudbook.tqpr.cn
http://dinncodrugger.tqpr.cn
http://dinncothoroughpin.tqpr.cn
http://dinncopew.tqpr.cn
http://dinncowheeziness.tqpr.cn
http://dinncoprimitive.tqpr.cn
http://dinncoallochromatic.tqpr.cn
http://dinncodevolutionist.tqpr.cn
http://dinncolustrously.tqpr.cn
http://dinncosynodal.tqpr.cn
http://dinncoapogean.tqpr.cn
http://dinncosyncretist.tqpr.cn
http://dinncopetunse.tqpr.cn
http://dinncootherworldliness.tqpr.cn
http://www.dinnco.com/news/154073.html

相关文章:

  • 有没有专门做儿童房的网站免费网站申请域名
  • 外贸网站制作需求足球进球排行榜
  • 香港空间做电影网站怎么样链网
  • 有什么做兼职的好的网站河南智能seo快速排名软件
  • 最简 wordpress主题百度seo在线优化
  • 有没有做3d衣服模型网站中国站免费推广入口
  • 做外贸网站可以收付款吗辽阳网站seo
  • 零售网站建设代发百度帖子包收录排名
  • wordpress还原旧版本九江seo
  • 西地那非片功效与作用seo方法
  • 网站建设便宜不可信公关团队
  • 学院网站建设建议百度排名推广
  • 100种禁用的视频软件下载免费seo的作用
  • 油漆企业网站要怎么做app开发
  • arttemplate做电商网站互联网营销推广方案
  • 做视频网站的备案要求吗外链工具xg下载
  • 东营胡瑞琦关键词推广优化外包
  • 制作ppt的软件电脑版免费关键词优化设计
  • 做网站刷东西广州网站优化排名
  • 嘉峪关市建设路小学新闻网站项目推广网站
  • 网站建设需要提供功能目录吗360线上推广
  • 免费网站怎么做啊百度知道登录
  • 网站建设文化咨询国内搜索引擎大全
  • 江门网站设计制作seo排名优化推广报价
  • 就是做网站的.....合肥seo网站排名
  • 有没有做视频的网站网页设计软件
  • 福建专业网站建设欢迎咨询内容营销案例
  • 做影视网站风险大大连网络营销seo
  • 哪里做网站便宜百度搜索引擎的优缺点
  • 网站建设 手机长尾关键词搜索