Tôi đang lưu trữ đường dẫn tệp dưới dạng đường dẫn tương đối trong cơ sở dữ liệu, nhưng sau đó tôi sử dụng thuộc tính lai để biến thành đường dẫn tuyệt đối khi ánh xạ của nó. Khi tôi truy vấn bằng thuộc tính này, nó sẽ phát ra lỗi. Dưới đây là mô hình:Truy vấn thuộc tính lai trong 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
Khi tôi chạy truy vấn này (nơi ref là một chuỗi unicode):
session.query(File).filter_by(f_path=ref).first()
Nó mang lại cho tôi lỗi này:
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:[email protected]_path hybrid_property] returning: ", os.path.join(env['project_dir'], self._f_path)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/posixpath.py", line 66, in join
if b.startswith('/'):
File "build/bdist.macosx-10.7-intel/egg/sqlalchemy/sql/expression.py", line 3426, in __nonzero__
raise TypeError("Boolean value of this clause is not defined")
TypeError: Boolean value of this clause is not defined
Hoàn hảo. Tôi vẫn còn nhiều thứ để tìm hiểu khi nói đến SQLAlchemy và SQL. Cảm ơn rất nhiều. –