我已使用flask
设置了一个应用程序,并使用Flask-SQLAlchemy
设置了一些模型。我想将一些JSON对象存储到一个单独的数据库中,因为这个数据库不会被频繁读取,只能写入。其他数据存储在主数据库中。
这很好用,除了我想在JSON数据库中的表和主数据库之间建立关系。如果我将表保存在同一个数据库中,这很有效(通过注释__bind_key__ = 'forms'
),但正如我所说,我希望将数据库分开。
我已尝试在此处查看各种解决方案,以及StackOverflow上的其他相关帖子。我显然做错了什么。
目前,我在运行python models.py
时遇到此错误:
(psycopg2.ProgrammingError) relation "filled_form_data" does not exist
sqlalchemy.exc.ProgrammingError: (psycopg2.ProgrammingError) relation "filled_form_data" does not exist
[SQL: '\nCREATE TABLE filled_form_modified (\n\tid SERIAL NOT NULL, \n\tdate TIMESTAMP WITHOUT TIME ZONE, \n\tfilled_form_data_id INTEGER, \n\tPRIMARY KEY (id), \n\tUNIQUE (id), \n\tFOREIGN KEY(filled_form_data_id) REFERENCES filled_form_data (id)\n)\n\n']
我认为我还需要在某处以某种方式指定数据库,但我虽然sqlalchemy
会为我做这件事。我对这里的文档页面感到有点困惑:http://flask-sqlalchemy.pocoo.org/2.1/binds/
我真的很感谢你对此的帮助。
from datetime import datetime
from flask_sqlalchemy import SQLAlchemy
from flask import Flask
db = SQLAlchemy()
class FilledFormData(db.Model):
"""Table of json-data for forms."""
__bind_key__ = 'forms'
__tablename__ = 'filled_form_data'
id = db.Column(db.Integer, primary_key=True, unique=True)
request_form = db.Column(db.JSON) # All data from the users-form
form_data = db.Column(db.JSON) # All data actually used to fill the pdf.
class FilledFormModified(db.Model):
"""Table of modification-dated for FilledForm-model."""
id = db.Column(db.Integer, primary_key=True, unique=True)
date = db.Column(db.DateTime, default=datetime.utcnow)
filled_form_data_id = db.Column(db.Integer, db.ForeignKey(FilledFormData.id))
filled_form_data = db.relationship(
FilledFormData, primaryjoin='FilledFormModified.filled_form_data_id==FilledFormData.id') # noqa
info = {'bind_key': 'forms'}
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'postgres:///varmekabler'
app.config['SQLALCHEMY_BINDS'] = {
'products': 'postgres:///vk_products',
'forms': 'postgres:///vk_forms'
}
db.init_app(app)
with app.app_context():
db.drop_all()
db.create_all()