在 Flask REST API 代码中生成 SQLite 数据库
Generate SQLite database in Flask REST API code
我是 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
生成数据库?
您将 db.create_all() 放在哪里?该错误可能只是放置的结果。当我将您的代码复制并粘贴到 PyCharm (运行ning 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 新手 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
生成数据库?
您将 db.create_all() 放在哪里?该错误可能只是放置的结果。当我将您的代码复制并粘贴到 PyCharm (运行ning 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 对象已在顶部声明。