【问题标题】:How do I seed a flask sql-alchemy database如何播种烧瓶 sql-alchemy 数据库
【发布时间】:2015-02-16 04:20:06
【问题描述】:

我是 python 新手,我刚刚学会了如何使用 flask restless 和 flask sql-alchemy 创建一个 api。但是,我想用随机值播种数据库。我如何实现这一目标?请帮忙。 这是api代码...

import flask
import flask.ext.sqlalchemy
import flask.ext.restless
import datetime

DATABASE = 'sqlite:///tmp/test.db'

#Create the Flask application and the FLask-SQLALchemy object
app = flask.Flask(__name__)
app.config ['DEBUG'] = True
app.config['SQLALCHEMY_DATABASE_URI'] =  DATABASE
db = flask.ext.sqlalchemy.SQLAlchemy(app)

#create Flask-SQLAlchemy models
class TodoItem(db.Model):
    id = db.Column(db.Integer, primary_key = True)
    todo = db.Column(db.Unicode)
    priority = db.Column(db.SmallInteger)
    due_date = db.Column(db.Date)

#Create database tables
db.create_all()

#Create Flask restless api manager
manager = flask.ext.restless.APIManager(app, flask_sqlalchemy_db = db)

#Create api end points
manager.create_api(TodoItem, methods = ['GET','POST','DELETE','PUT'], results_per_page = 20)

#Start flask loop
app.run()

【问题讨论】:

标签: flask-sqlalchemy flask-restless


【解决方案1】:

来自另一个新手,forgerypy 和 forgerypy3 库可用于此目的(尽管它们看起来好像没有被触及过)。

如何通过将它们添加到模型中来使用它们的简单示例:

class TodoItem(db.Model):

    ....

    @staticmethod
    def generate_fake_data(records=10):
        import forgery_py
        from random import randint
        for record in records:
            todo = TodoItem(todo=forgery_py.lorem_ipsum.word(),
                            due_date=forgery_py.date.date(),
                            priority=randint(1,4))
            db.session.add(todo)
        try:
            db.session.commit()
        except:
            db.session.rollback()

然后您将在 shell 会话中调用 generate_fake_data 方法。

Miguel Grinberg 的 Flask Web Development(O'Reilly 的书,不是博客)第 11 章是一个很好的资源。

【讨论】:

  • 指向一本书并不能真正回答问题,
  • 是的,我同意。我会添加它作为评论,但我没有足够的分数(尽管我可以评论我自己的答案)。如果您建议,完全愿意将其删除以符合堆栈溢出的格式。我在找同样的东西,只找到了这个问题。
【解决方案2】:

我有一个类似的问题并做了一些研究,发现了一些有用的东西。

我看到的模式是基于注册Flask CLI custom command,类似于:flask seed

根据您的示例,这看起来像这样。首先,将以下内容导入您的 api 代码文件(假设您将其命名为 server.py):

from flask.cli import with_appcontext

(我看到你这样做了import flask,但我只想添加你应该将这些更改为from flask import what_you_need

接下来,创建一个为您的项目播种的函数:

@with_appcontext
def seed():
   """Seed the database."""
   todo1 = TodoItem(...).save()
   todo2 = TodoItem(...).save()
   todo3 = TodoItem(...).save()

最后,将这些命令注册到您的烧瓶应用程序中:

def register_commands(app):
    """Register CLI commands."""
    app.cli.add_command(seed)

在你配置好你的应用程序之后,确保你调用register_commands来注册命令:

register_commands(app)

此时,您应该可以运行:flask seed。您可以使用相同的模式添加更多功能(可能是flask reset)。

【讨论】:

    猜你喜欢
    • 2019-04-27
    • 2020-11-25
    • 1970-01-01
    • 1970-01-01
    • 2013-01-29
    • 2016-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多