gpt4 book ai didi

python - 无法使用flask_sqlalchemy获得一对多关系,得到sqlalchemy.exc.InvalidRequestError

转载 作者:行者123 更新时间:2023-11-30 23:00:49 26 4
gpt4 key购买 nike

我很可能在这里缺少一些基本概念,但我尝试创建一些类似简单的代码审查应用程序的东西,并在设计数据库架构时尝试遵循此文档:

http://flask-sqlalchemy.pocoo.org/2.1/models/#one-to-many-relationships

我的模型的部分(可用于重现)是:

#!/usr/bin/env python
# -*- coding: UTF-8 -*-

# all the imports
from flask import Flask, request, session, g, redirect, url_for, \
abort, render_template, flash
from flask_sqlalchemy import SQLAlchemy

# configuration
DEBUG = True
SECRET_KEY = 'development key'
SQLALCHEMY_DATABASE_URI = 'sqlite:////tmp/test.db'


# create our little application :)
app = Flask(__name__)
app.config.from_object(__name__) # load all uppercase constants here (see configuration section above)
db = SQLAlchemy(app)

class Repo(db.Model):
id = db.Column(db.Integer, primary_key=True)
repo = db.Column(db.String(120), unique=True)
commits = db.relationship('Commit',
backref=db.backref('repo', lazy='dynamic'))

def __init__(self, repo=None):
self.repo = repo

def __repr__(self):
return '<Repo %r>' % (self.repo)


class Commit(db.Model):
id = db.Column(db.Integer, primary_key=True)
repo_id = db.Column(db.Integer, db.ForeignKey('repo.id'))
commit = db.Column(db.String(64))

def __init__(self, repo_id=None, commit=None):
self.repo_id = repo_id
self.commit = commit

def __repr__(self):
return '<Commit %r (repo %r)>' % (self.commit, self.repo_id)

if __name__ == '__main__':
app.run()

当我尝试创建第一个存储库时,我得到回溯:

>>> import code_review
>>> code_review.db.create_all()
>>> code_review.Repo('Pokus.git')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<string>", line 2, in __init__
File "/usr/lib64/python2.7/site-packages/sqlalchemy/orm/instrumentation.py", line 347, in _new_state_if_none
state = self._state_constructor(instance, self)
File "/usr/lib64/python2.7/site-packages/sqlalchemy/util/langhelpers.py", line 747, in __get__
obj.__dict__[self.__name__] = result = self.fget(obj)
File "/usr/lib64/python2.7/site-packages/sqlalchemy/orm/instrumentation.py", line 177, in _state_constructor
self.dispatch.first_init(self, self.class_)
File "/usr/lib64/python2.7/site-packages/sqlalchemy/event/attr.py", line 256, in __call__
fn(*args, **kw)
File "/usr/lib64/python2.7/site-packages/sqlalchemy/orm/mapper.py", line 2860, in _event_on_first_init
configure_mappers()
File "/usr/lib64/python2.7/site-packages/sqlalchemy/orm/mapper.py", line 2756, in configure_mappers
mapper._post_configure_properties()
File "/usr/lib64/python2.7/site-packages/sqlalchemy/orm/mapper.py", line 1710, in _post_configure_properties
prop.init()
File "/usr/lib64/python2.7/site-packages/sqlalchemy/orm/interfaces.py", line 183, in init
self.do_init()
File "/usr/lib64/python2.7/site-packages/sqlalchemy/orm/relationships.py", line 1632, in do_init
self._generate_backref()
File "/usr/lib64/python2.7/site-packages/sqlalchemy/orm/relationships.py", line 1863, in _generate_backref
mapper._configure_property(backref_key, relationship)
File "/usr/lib64/python2.7/site-packages/sqlalchemy/orm/mapper.py", line 1614, in _configure_property
prop.post_instrument_class(self)
File "/usr/lib64/python2.7/site-packages/sqlalchemy/orm/interfaces.py", line 526, in post_instrument_class
self.strategy.init_class_attribute(mapper)
File "/usr/lib64/python2.7/site-packages/sqlalchemy/orm/dynamic.py", line 33, in init_class_attribute
"uselist=False." % self.parent_property)
sqlalchemy.exc.InvalidRequestError: On relationship Commit.repo, 'dynamic' loaders cannot be used with many-to-one/one-to-one relationships and/or uselist=False.

最佳答案

好吧,我对各种指南感到困惑,看起来这就是我想要的:

-    commits = db.relationship('Commit',
- backref=db.backref('repo', lazy='dynamic'))
+ commits = db.relationship('Commit',
+ backref='repo', lazy='dynamic')

关于python - 无法使用flask_sqlalchemy获得一对多关系,得到sqlalchemy.exc.InvalidRequestError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35147785/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com