相关疑难解决方法(0)

SQLAlchemy - 为子计数编写混合方法

我正在使用Flask-SQLAlchemy,我正在尝试在父模型中编写一个混合方法,它返回它拥有的子项数,因此我可以使用它来进行过滤,排序等.这里有一些简化的代码我尝试着:

# parent.py
from program.extensions import db
from sqlalchemy.ext.hybrid import hybrid_method

class Parent(db.Model):
    __tablename__ = 'parents'
    parent_id = db.Column(db.Integer, primary_key=True)

    name = db.Column(db.String(80))
    children = db.relationship('Child', backref='parent', lazy='dynamic')

    def __init__(self, name):
        self.name = name

    @hybrid_method
    def child_count(self):
        return self.children.count()

    @child_count.expression
    def child_count(cls):
        return ?????

# child.py
from program.extensions import db
from program.models import Parent

class Child(db.Model):
    __tablename__ = 'children'
    child_id = db.Column(db.Integer, primary_key=True)
    parent_id = db.Column(db.Integer, db.ForeignKey(Parent.parent_id))

    name = db.Column(db.String(80))
    time = db.Column(db.DateTime)

    def __init__(self, name, time):
        self.name …
Run Code Online (Sandbox Code Playgroud)

python sqlalchemy flask

17
推荐指数
1
解决办法
6750
查看次数

在SQLAlchemy中查询混合属性

我将文件路径存储为数据库中的相对路径,但我在使用混合属性时将其映射为绝对路径.当我使用此属性进行查询时,它会抛出错误.这是模型:

class File(Base):
    __tablename__ = 'files'
    ...

    _f_path = Column(Unicode(30))

    ...

    @hybrid_property
    def f_path(self):
        env = shelve.open('environment')
        return os.path.join(env['project_dir'], self._f_path)

    @f_path.setter
    def f_path(self, _f_path):
        self._f_path = _f_path
Run Code Online (Sandbox Code Playgroud)

当我运行此查询(其中ref是一个unicode字符串):

session.query(File).filter_by(f_path=ref).first()
Run Code Online (Sandbox Code Playgroud)

它给了我这个错误:

File "/Users/Ben/Dropbox/Giraffe/giraffe_server/giraffe/file_handlers/maya.py", line 135, in process_file
    rf = session.query(File).filter_by(f_path=str(ref)).first()
  File "build/bdist.macosx-10.7-intel/egg/sqlalchemy/orm/query.py", line 1211, in filter_by
    for key, value in kwargs.iteritems()]
  File "build/bdist.macosx-10.7-intel/egg/sqlalchemy/orm/util.py", line 597, in _entity_descriptor
    return getattr(entity, key)
  File "build/bdist.macosx-10.7-intel/egg/sqlalchemy/ext/hybrid.py", line 681, in __get__
    return self.expr(owner)
  File "/Users/Ben/Dropbox/Giraffe/giraffe_server/giraffe/model.py", line 133, in f_path
    print "\n\n\n[model.py:File@f_path hybrid_property] returning: ", os.path.join(env['project_dir'], self._f_path) …
Run Code Online (Sandbox Code Playgroud)

python sqlalchemy properties

10
推荐指数
1
解决办法
3871
查看次数

标签 统计

python ×2

sqlalchemy ×2

flask ×1

properties ×1