我按照https://pythonhosted.org/Flask-SQLAlchemy/index.html的提示,创建两个表,如下,该怎么写入数据呢?
tags = db.Table('tags',
db.Column('tag_id', db.Integer, db.ForeignKey('tag.id')),
db.Column('page_id', db.Integer, db.ForeignKey('page.id'))
)
class Page(db.Model):
#文章对象,标签是多对多
__tablename__ = 'page'
id = db.Column(db.Integer, primary_key=True)
tags = db.relationship('Tag', secondary=tags,
backref=db.backref('pages', lazy='dynamic'))
title = db.Column(db.String(200), unique=True)
date = db.Column(db.DateTime)
page = db.Column(db.String(20000))
def __init__(self, title, date, page):
self.title = title
self.date = date
self.page = page
def __repr__(self):
return '<Page %r>' % self.title
class Tag(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(20), unique=True)
def __init__(self, name):
self.name = name
def __repr__(self):
return '<Tag: %r>' % self.name
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
楼上们这都是什么诡异的做法啊,。。。。
flask-admin有一个实例刚好做到了https://github.com/mrjoes/flask-admin/blob/master/examples/sqla/simple.py
表定义:
咳,原来楼主问的是怎么添加,刚好这个实例下面一点也有:
page = Page()
tag1 = Tag()
page.tags.append(tag1...)#有没有extend我忘记了
lz不是在问怎么做多对多,而是问多对多怎么插入吧,看这个
http://docs.sqlalchemy.org/en/rel_0_9/orm/tutorial.html#orm-tutorial-many-to-many
里面有例子。。我感觉写入很简单,你把tags当成一个list就好了
没明白题主这个多对多是什么意思,看代码题主的意图是想添加一个page,然后给page加上tag。按照贴出来的代码,题主认为一个page只能对应一个tag。题主是想要下图这样的吗?一个问题对应多个标签?或者多个问题对应一个标签?

其实,tags可以设为
string类型,然后添加多个tag.id并以逗号分隔开。显示标签的时候读出这条
tags,再用split(',')方法转为[],然后遍历就可以了。还是感觉操作数据库太麻烦了.