【问题标题】:Generate SQLite database in Flask REST API code在 Flask REST API 代码中生成 SQLite 数据库
【发布时间】:2021-01-19 02:05:48
【问题描述】:

我是 REST API 的新手,并开始使用 Flask、SQLAlchemy 和 Marshmallow 构建第一个 REST API 应用程序。这是我的app.py 文件:

from flask import Flask, request, jsonify
from flask_sqlalchemy import SQLAlchemy
from flask_marshmallow import Marshmallow
import os

# Initialize App
app = Flask(__name__)
basedir = os.path.abspath(os.path.dirname(__file__))

# Database Setup
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///' + os.path.join(basedir, 'db.sqlite')
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
# Init db
db = SQLAlchemy(app)
# Init marshmallow
ma = Marshmallow(app)


# Product Class/Model
class Product(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(100), unique=True)
    description = db.Column(db.String(200))
    price = db.Column(db.Float)
    qty = db.Column(db.Integer)

    def __init__(self, name, description, price, qty):
        self.name = name
        self.description = description
        self.price = price
        self.qty = qty


# Product Schema
class ProductSchema(ma.Schema):
    class Meta:
        fields = ('id', 'name', 'description', 'price', 'qty')


# Init Schema
product_schema = ProductSchema()
products_schema = ProductSchema(many=True)


# Create Product
@app.route('/product', methods=['POST'])
def add_product():
    name = request.json['name']
    description = request.json['description']
    price = request.json['price']
    qty = request.json['qty']

    new_product = Product(name, description, price, qty)

    db.session.add(new_product)
    db.session.commit()

    return product_schema.jsonify(new_product)


# Get All Products
@app.route('/receive', methods=['GET'])
def get_products():
    all_products = Product.query.all()
    result = products_schema.dump(all_products)
    return jsonify(result)


# Run the Server
if __name__ == '__main__':
    app.run(debug=True)

为了生成 SQLite 数据库,我必须打开 python 交互式 shell,然后我必须这样做:

from app import db
db.create_all()

但我必须从app.py 本身来分类数据库,所以我在app.py 中插入相同的命令,但它给了我错误:

OperationalError: (sqlite3.OperationalError) no such table: product

如何从app.py 生成数据库?

【问题讨论】:

    标签: rest flask sqlalchemy flask-sqlalchemy flask-restful


    【解决方案1】:

    您将 db.create_all() 放在哪里?错误可能只是放置的结果。当我将您的代码复制并粘贴到 PyCharm(运行 Python 3.7)中时,它会在我放置时创建良好的数据库

    db.create_all() 
    

    紧接在之前

    # Run the Server
    if __name__ == '__main__':
        app.run(debug=True)
    

    如果您在实例化 db 对象之前尝试运行 db.create_all(),则会抛出错误,因为 db 尚不存在。

    您根本不需要使用“from app import db”,因为 db 对象是在顶部声明的。

    【讨论】:

    • 谢谢!这对我来说很愚蠢,因为我是 REST 的新手。
    猜你喜欢
    • 2012-05-02
    • 2022-07-20
    • 2019-08-28
    • 1970-01-01
    • 1970-01-01
    • 2014-07-11
    • 2011-01-21
    • 1970-01-01
    • 2011-10-07
    相关资源
    最近更新 更多