如果 Flask 上不存在表,如何使用 SQLAlchemy 创建表?

2023-12-11

我正在使用 SQLAlchemy,并且有以下代码:

Model:

class User(db.Model):
    __tablename__ = 'user'
    __table_args__ = {'schema': 'task', 'useexisting': True}
    id = Column(Integer, primary_key=True, autoincrement=True)
    firstname = Column(String)

.env

SQLALCHEMY_DATABASE_URI = os.getenv('SQLALCHEMY_DATABASE_URI')

app.py

def create_app(config_file):
    """Create a Flask application using the app factory pattern."""

    app = Flask(__name__)

    """Load configuration."""

    app.config.from_pyfile(config_file)

    """Init app extensions."""
    from .extensions import db

    db.init_app(app)

如果 SQLite 文件不存在,则会创建该文件,但不会创建每个模型的表。

问题是我该怎么做才能为每个模型创建表?


只需添加:

db.create_all()

in app.py在......的最后create_app().

create_all()仅当表不存在时才会创建它们,并且不会更改之前创建的表。

如果您想从命令行创建数据库和表,您只需键入:

python
from app.py import db
db.create_all()
exit()

工作示例:

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.secret_key = "Secret key"
app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:///my_database.sqlite3"
app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = False

db = SQLAlchemy(app)

class Data(db.Model):
    id = db.Column(db.Integer, primary_key = True)
    name = db.Column(db.String(50))
    email = db.Column(db.String(50))
    phone = db.Column(db.String(50))

db.create_all()

# add a row
# comment out after the 1st run
table_row = Data(name="My Name", email="[email protected]", phone="123456")
db.session.add(table_row)
db.session.commit()
print "A row was added to the table"

# read the data
row = Data.query.filter_by(name="My Name").first()
print "Found:", row.email, row.phone

if __name__ == "__main__":
    app.run(debug=True)

这是针对 Python 2.7 的,要与 Python 3.x 一起运行,只需更改print声明来调用print()功能。

NOTE:
使用时自动的模型类构造函数传递给模型类构造函数的参数must be keyword争论,否则会出现错误。否则你可以覆盖__init__() inside Data()像这样的类:

def __init__(self, name, email, phone, **kwargs):
    super(Data, self).__init__(**kwargs)
    self.name = name
    self.email = email
    self.phone = phone

在这种情况下你不必使用keyword论据。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如果 Flask 上不存在表,如何使用 SQLAlchemy 创建表? 的相关文章

随机推荐

  • Symfony2 登录和安全

    有没有办法可以存储用户上次登录的时间 我正在使用 symfony2 安全配置一切正常 我见过这个基于 Symfony 2 的项目的安全性和登录 这是一个类似的问题 但它不符合我的需要 还有其他解决办法吗 您可以创建一个Authenticat
  • C# HttpClient 和 API

    我有一个 Web 应用程序 它使用 HttpClient 类从 API 中提取数据 我有几个问题 HttpClient 是从 API 获取数据的最佳选择吗 我从 APi 获取一个字符串并将其反序列化为一个对象 每次使用时都会创建 HttpC
  • Python 中如何确定范围[重复]

    这个问题在这里已经有答案了 为什么第二个函数中的第一个 print 语句会抛出错误x没有定义 x 5 def function a print x def function b print x x 7 print x 运行第一个函数会得到以
  • ubuntu 16.04 nginx 更改 phpmyadmin url 不起作用

    Ubuntu 16 04 5 LTS Xenial 4 18 8 x86 64 linode117 nginx version nginx 1 10 3 Ubuntu php v7 0 32 0ubuntu0 16 04 1 etc ngi
  • matplotlib 在 IPython 中不使用 matplotlibrc 文件

    我最近从 matplotlib v1 5 3 从 v2 0 0 升级 但通过此更改 matplotlib 在绘制图形时似乎不再使用我编辑的 matplotlibrc 文件 当我打开 matplotlibrc 文件时 我看到我的更改实际上已实
  • Shiny - 使用 for 循环插入 UI 在每个输出中返回相同的元素

    我想在我的 Shiny 应用程序中插入非预定义数量的图表 我使用了一个for循环和一系列的insertUI 问题是当我运行它时 文本元素的行为符合预期 但图形都呈现相同的图像 我怎样才能防止这种情况发生 这是一个代表 library shi
  • 复制 TreeView 节点

    我正在尝试将选定的树视图节点复制到剪贴板 以便可以将其粘贴到记事本中 这是我的代码 但它不起作用 TreeNode selNode TreeNode this treeView1 SelectedNode Clipboard SetData
  • 尝试使用正则表达式删除Python中的字符EM DASH“—”(—)

    我得到了这个顽固的 EM DASH 字符 我试图使用正则表达式删除它 但由于某种原因我无法让它工作 这是我正在使用的代码 editedSource re sub r u2014 str source 我在这里做错了什么 我很确定我得到了正确
  • 如何表达复数的四分函数

    确实存在所谓的超操作序列 它的工作原理就像你构建乘法一样a b a a a a a并添加了许多a重复b次 然后是求幂a b a a a a a与许多乘法a重复b次 然后 就出现了四联 表示为指数塔 就像a b a a a a 重复b tim
  • 将具有 Alpha 通道的图像复制到具有自定义背景颜色的剪贴板?

    Code private void Foo Canvas canvas The content is a bit larger Size size new Size canvas ActualWidth 1 1 canvas ActualH
  • x86汇编linux中如何解释系统调用

    我对为什么 如何在 Linux 环境中的 x86 程序集中打印一个值感到困惑 例如 如果我想打印一个值 我会这样做 mov eax 4 mov ebx 1 mov ecx msg mov edx msgLength int 80h 现在我明
  • AKS 创建的服务主体密码过期

    我使用 创建 Kubernetes 集群 功能在 Azure 门户中创建了 AKS 集群 并允许其创建新的服务主体 我开始怀疑该委托人使用的凭证是否过期 为了避免 K8s 在凭证过期时与 Azure 通信出现问题 我开始查看已创建的帐户 如
  • jQuery Mobile 在一个对话框中显示多个对话框

    我已经搜索过 但没有找到这样做的例子 我希望能够为 jQM 打开一个对话框 并在一个对话框内进行逐步过程 我认为这需要将多个对话框加载到一个对话框中 并且不知道这是否可行 我们将 Backbone 与 jQM 结合使用 并希望能够在对话框中
  • 维持 mgo 会话的最佳实践

    我目前正在使用带有 mgo lib 的 mongodb 作为 Web 应用程序 但我不确定我使用它的方式是否良好 package db import gopkg in mgo v2 const MongoServerAddr 192 168
  • pymongo 按日期时间分组

    我试图按日期字段 日期时间 搜索集合和分组记录 我知道 pymongo 将它们转换为背景上的正确类型 ISODate 或类似的东西 问题是 由于日期时间对象具有日期 时间 时区 我如何告诉组运算符仅使用日期部分 因为否则我不会得到所需的分组
  • ASP.NET AJAX 返回 JSON 但未识别为 JSON

    我有这个功能可以让我返回经理列表 function getManagers var jqxhr ajax type POST contentType application json charset utf 8 url webservice
  • 第一个 postLink() 不创建表单

    使用已经存在的代码烘焙成 CRUD 我有以下代码删除一个项目 问题是它说谎了包裹在 FORM 标签中 所以最终发生的是Cake 不包含 postLink 将提交的表单 是否有另一种方法即使在我增加安全设置时仍然可以保持 Cake 基础设施的
  • 用Python发送广播

    我正在尝试学习编写套接字 在Python 3中 我只是尝试从服务器发送广播并从客户端接收它 我的问题是 每当我尝试将数据包发送到 255 255 255 255 时 似乎实际上没有发送任何内容 我尝试使用wireshark查找数据包 但除了
  • 当我复制电子表格时,脚本/触发器不起作用

    我创建了一个电子表格onEdit 基于名为的函数的触发器fillvalues 而且效果很好 我需要制作此电子表格的多个副本 因为它用于制作工作报告 但是当我制作副本时 脚本不起作用 因为触发器处于非活动状态或者需要授权才能运行 如何克服这个
  • 如果 Flask 上不存在表,如何使用 SQLAlchemy 创建表?

    我正在使用 SQLAlchemy 并且有以下代码 Model class User db Model tablename user table args schema task useexisting True id Column Inte