假设我有一个名为import os
for path, subdirs, files in os.walk('.'):
for name in files:
with open(name) as f:
#Process the file line by line
for line in f:
if 'parq' in line:
#If pattern is found in file print the path and file
print 'Pattern found in directory %s' %path,
print 'in file %s' %name
break
的模型,以及一个名为User
的表格:
followers
有两种方法可以查询followers = db.Table(
'followers',
db.Column('follower_id', db.Integer, db.ForeignKey('user.id')),
db.Column('followed_id', db.Integer, db.ForeignKey('user.id'))
)
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(64), index=True, unique=True)
followed = db.relationship(
'User',
secondary=followers,
primaryjoin=(followers.c.follower_id==id),
secondaryjoin=(followers.c.followed_id==id),
backref=db.backref('followers', lazy='dynamic'),
lazy='dynamic'
)
模型:
User
db.session.query(User).filter(...).all()
后者被认为是前者的简写,因为它们功能相同但更紧凑。但是,当我们来到桌面时,User.query.filter(...).all()
给了我一个错误:
AttributeError:'Table'对象没有属性'query'
followers.query.filter(...).all()
有简写吗?或者,如何从db.session.query(followers).filter(...).all()
对象获取query
对象?
答案 0 :(得分:2)
flask-sqlalchemy仅在query
上定义db.Model
,所以虽然您可以对Foo.query
子类进行db.Model
,但您不能在Table
上执行相同操作实例。
我想,你可以把它做成monkeypatch,但我不建议这样做。
答案 1 :(得分:1)
您的追随者对象可能存在问题,您可能希望再次检查它。
Follower.query.all()应该可以正常工作
如果您的用户碰巧与关注者有关系,例如。
class User():
followers = db.relationship("Followers", lazy='dynamic')
您可以通过以下方式执行:
user = User.query.get(id=1)
user.followers.all()
*更新
您的关注者表的声明与您声明User表的方式不同。用户表基于db.Model,db.Model附加了一个查询类: http://flask-sqlalchemy.pocoo.org/2.1/api/#flask.ext.sqlalchemy.Model
此外,您还可以查看页面底部的启蒙之路。
http://flask-sqlalchemy.pocoo.org/2.1/quickstart/#quickstart
答案 2 :(得分:1)
添加到@univerio回答:相反,猴子修补可以将flask_sqlalchemy.Table
包装到自定义类中,其中包含query
属性作为简写。
class QueryableTable:
def __init__(self, *args, **kwargs):
table = db.Table(*args, **kwargs)
super().__setattr__('_flask_sa_table', table)
@property
def query(self):
return db.session.query(self._flask_sa_table)
def __getattr__(self, name):
return getattr(self.__dict__['_flask_sa_table'], name)
def __setattr__(self, name, value):
return setattr(self._flask_sa_table, name, value)
将其用作followers = QueryableTable('followers', db.Column(...), ...)
答案 3 :(得分:0)
要使用session.query()
方法从表中检索行,您必须将表名放在query()
内。
例如:对于表名"同伴",请session.query(fellowers).filter_by(id = fellow_id).one()
答案 4 :(得分:0)
我不确定我使用的解决方案有多常规,但是我采用了pandas.read_sql_query
(link),所以它或多或少都可以这样工作:
pandas.read_sql_query('SELECT your_table_column from followers WHERE follower_id = your_id', your_app.config['SQLALCHEMY_DATABASE_URI'])
这为我提供了与所需的follower_id相关的所有记录,作为熊猫数据框,可以进一步处理。