SQLAlchemy有很多很多关系&关联对象

时间:2015-01-17 13:27:40

标签: python sqlalchemy many-to-many flask-sqlalchemy

我无法配置简单的关系。我设法通过使用简单的关联表来使其工作得相当好,但我想要额外的“元”#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.

这适用于我制作的原始表格,但显然我对这个稍微复杂的设置做了一些非常错误。

任何人都可以帮我解决我想要配置的关系吗?我也担心这是一个构思错误的关系,所以会很感激关于标准关系设置的建议。

0 个答案:

没有答案