Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 我如何将炼金术与多对多模型结合使用?_Python_Python 3.x_Sqlalchemy_Flask Sqlalchemy - Fatal编程技术网

Python 我如何将炼金术与多对多模型结合使用?

Python 我如何将炼金术与多对多模型结合使用?,python,python-3.x,sqlalchemy,flask-sqlalchemy,Python,Python 3.x,Sqlalchemy,Flask Sqlalchemy,我想用炼金术建立一种多对多的关系,但我甚至连最简单的例子都会失败。我使用了链接中的示例代码,并在文件call app.py中添加了实现此功能的要素: from flask import Flask from flask_sqlalchemy import SQLAlchemy app = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///test.db' app.config['SQLALCHEMY_TRACK

我想用炼金术建立一种多对多的关系,但我甚至连最简单的例子都会失败。我使用了链接中的示例代码,并在文件call app.py中添加了实现此功能的要素:

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///test.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db = SQLAlchemy(app)


    tags = db.Table('tags',
        db.Column('tag_id', db.Integer, db.ForeignKey('tag.id'), primary_key=True),
        db.Column('page_id', db.Integer, db.ForeignKey('page.id'), primary_key=True)
    )

class Page(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    page_name = db.Column(db.String(30))
    tags = db.relationship('Tag', secondary=tags, lazy='subquery',
        backref=db.backref('pages', lazy=True))

class Tag(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    tag_name = db.Column(db.String(30))
然后,我在Python命令行中键入:

from app import * 
db.create_all()
它正确地创建了文件,我可以看到三个表。太好了

我现在如何创建本例中的页面和标记。。。我期望的是:

new_page = Page(tags=["tagone"])
但我有一个错误:

AttributeError:“str”对象没有属性“\u sa\u instance\u state”


老实说,我不知道从哪里开始。

我通过更多的搜索和测试找到了答案。我不确定这是否是最佳做法,但它是有效的:

 new_page_too = Page(page_name='Johnny New')
 new_tag = Tag(tag_name='Solved')
 new_tag_too = Tag(tag_name='Fixed It!')
 new_page_too.tags.append(new_tag)
 new_page_too.tags.append(new_tag_too)
 db.session.add(new_page_too)
 db.session.commit()
非常高兴,我喜欢炼金术:-)

另外,由于有评论,您也可以这样做:

new_page = Page(page_name='Johnny Third', tags=[Tag(tag_name='Tag1Test'), Tag(tag_name='Tag2Test')])

从理论上讲,这也应该有效。起初,您提供的是字符串文字,而不是新构造的对象
new\u page=page(tags=[Tag(Tag\u name='Tag'])
我认为您缺少一个紧密的括号,只是根据您的想法尝试了一下,并获得了成功:-)谢谢您。。。。新建页面=第页(第三页),标签=[Tag(Tag_name='Tag1Test'),Tag(Tag_name='Tag2Test'))