Python 多对多db.relationship在保存到数据库中的实现。炼金术
我的应用程序看起来像:Python 多对多db.relationship在保存到数据库中的实现。炼金术,python,flask,sqlalchemy,flask-sqlalchemy,Python,Flask,Sqlalchemy,Flask Sqlalchemy,我的应用程序看起来像: 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')
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类是多对多db结构。
我需要的是在同一个html表单中添加书名和作者姓名,并将其保存在我的数据库中
@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'))
但这里缺少了一些东西。这些新创作的书和作者之间没有关联。他们没有作者和书籍的关系。
需要添加什么语句来实现此关系?必须显式连接两个对象才能创建关系。例如:
author.books.append(book)
这很有帮助,谢谢。这是我需要的正确的代码字符串。有趣的是,我读了你的博客,然后收到了你的留言:)