【问题标题】:Many-to-many db.relationship implementation in saving to database. SQLAlchemy保存到数据库中的多对多 db.relationship 实现。 SQL炼金术
【发布时间】:2014-04-26 09:49:22
【问题描述】:

我的应用看起来像:

app = Flask(__name__, template_folder='templates')
app.config.from_object('config')
db = SQLAlchemy(app)

我的 SQLAlchemy 类如下所示:

connections = db.Table('connections', db.metadata,
    db.Column('book_id', db.Integer, db.ForeignKey('books.id')),
    db.Column('author_id', db.Integer, db.ForeignKey('authors.id'))
)

class Author(db.Model):
    __tablename__ = 'authors'
    __searchable__ = ['a_name']
    __table_args__ = {'sqlite_autoincrement': True,}

    id = db.Column(db.Integer, primary_key=True)
    a_name = db.Column(db.String(80), unique=True)

    def __repr__(self):
        return unicode(self.a_name)


class Book(db.Model):
    __tablename__ = 'books'
    __searchable__ = ['b_name']
    __table_args__ = {'sqlite_autoincrement': True,}

    id = db.Column(db.Integer, primary_key=True)
    b_name = db.Column(db.String(80))
    authors = db.relationship('Author', secondary=lambda: connections,
                               backref=db.backref('books'))

    def __repr__(self):
        return unicode(self.b_name)

如您所见。 SQLAlchemy 类是多对多数据库结构。 我需要的是在同一个 html 表单中添加书名和 ahthors 名称并将其保存在我的数据库中。

@app.route('/add', methods=['GET', 'POST'])
def add_book():
    if request.method == "POST":
        author = Author(a_name = request.form['author'])
        book = Book(b_name = request.form['book'])
        db.session.add(author)
        db.session.add(book)
        db.session.commit()
        return redirect(url_for('show_books'))

但是这里缺少一些东西。这些新创建的书和作者彼此不相关。他们没有作者与书籍的关系。 我需要添加什么语句来实现这种关系?

【问题讨论】:

    标签: python flask sqlalchemy flask-sqlalchemy


    【解决方案1】:

    您必须明确连接这两个对象才能创建关系。例如:

    author.books.append(book)
    

    【讨论】:

    • 它有帮助,谢谢。这是我需要的正确的代码字符串。有趣的是,我正在阅读你的博客,而不是在这里收到你的消息:)
    猜你喜欢
    • 2014-10-12
    • 2020-04-07
    • 1970-01-01
    • 2016-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-02
    • 1970-01-01
    相关资源
    最近更新 更多