Как мне заполнить базу данных sql-alchemy flask

Я новичок в python, я только что научился создавать API, используя flask restless и flask sql-alchemy. Однако я хотел бы заполнить базу данных случайными значениями. Как мне этого добиться? Пожалуйста помоги. Вот код апи...

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()

person Ingadi    schedule 17.12.2014    source источник
comment
Посмотрите это stackoverflow.com/questions/19334604/   -  person Nenodias    schedule 27.07.2016


Ответы (2)


У меня был похожий вопрос, и я провел небольшое исследование, нашел что-то, что сработало.

Паттерн, который я вижу, основан на регистрации пользовательской команды CLI Flask. , что-то вроде: 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), используя тот же шаблон.

person Mike    schedule 29.06.2018

От другого новичка для этой цели доступны библиотеки 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()

Затем вы должны вызвать метод generate_fake_data в сеансе оболочки.

И глава 11 «Веб-разработка Flask» Мигеля Гринберга (книга О'Рейли, а не блог) — хороший ресурс для этого.

person Han Lazarus    schedule 11.01.2017
comment
Указатели на книгу на самом деле не отвечают на вопрос, - person ; 12.01.2017
comment
Да, я согласен. Я бы добавил это как комментарий, но мне не хватает баллов (хотя мне разрешено комментировать свой собственный ответ). Полностью готов удалить его, чтобы он соответствовал формату переполнения стека, если вы посоветуете. Я искал то же самое и нашел только этот вопрос. - person Han Lazarus; 13.01.2017