我无法配置简单的关系。我设法通过使用简单的关联表来使其工作得相当好,但我想要额外的“元”#39;字段所以我正在研究使用关联对象模式。 (是的我是DB新手)
from flask.ext.sqlalchemy import SQLAlchemy
from flask import Flask
import os
import re
import datetime
app = Flask(__name__)
basedir = os.path.abspath(os.path.dirname(__file__))
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///' + os.path.join(basedir, 'data.sqlite')
app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN'] = False
db = SQLAlchemy(app)
class NewsletterInfo(db.Model):
__tablename__ = 'newsletter_info'
id = db.Column(db.Integer, primary_key = True)
user_id = db.Column(db.Integer, db.ForeignKey('users.id'))
newsletter_id = db.Column(db.Integer, db.ForeignKey('newsletter.id'))
date_added = db.Column(db.DateTime, default=datetime.datetime.now)
date_modified = db.Column(db.DateTime, default=datetime.datetime.now)
note = db.Column(db.String(140))
class User(db.Model):
__tablename__ = 'users'
id = db.Column(db.Integer, primary_key=True)
email = db.Column(db.String(128), unique=True)
password = db.Column(db.String(128))
date_registered = db.Column(db.DateTime, default=datetime.datetime.now)
email_verified = db.Column(db.Boolean, default=False)
newsletters = db.relationship('NewsletterInfo')
class Newsletter(db.Model):
__tablename__ = 'newsletter'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String)
category = db.Column(db.String(36))
price = db.Column(db.String)
您可以完全忽略烧瓶的使用。
我基本上希望每个用户能够根据需要跟踪尽可能多的简报。每个用户>>时事通讯连接都会有一些元信息,例如他们第一次添加时甚至可选的便条。
我在尝试做#34; my_user.newsletters.append(my_newsletter)"
时出现此错误 Attempting to flush an item of type <class 'Newsletter'> as a member of collection "User.newsletters". Expected an
object of type <class 'NewsletterInfo'> or a polymorphic subclass of this type.
这适用于我制作的原始表格,但显然我对这个稍微复杂的设置做了一些非常错误。
任何人都可以帮我解决我想要配置的关系吗?我也担心这是一个构思错误的关系,所以会很感激关于标准关系设置的建议。