このエラー Operand should contain 1 column(s) に問題があります。これは、サブクエリの 2 つのフィールドであることがわかりますが、私のコードから、flask-sqlalchemy を使用すると、何が問題なのかわかりません。アプリケーションをflask-peeweeからflask-sqlalchemyに変換していますが、解決できないのはこの1つの問題です。
これがメインのクエリ コードです。最初のクエリは新しい sql-alchemy クエリで、もう 1 つは peewee です。
//SqlAlchmey
return UserBeer.query.filter(or_( UserBeer.id < self.following(), UserBeer.username == self)).order_by(UserBeer.tried_date.desc()).limit(5)
//Peewee Query
return UserBeer.select(Beer, UserBeer).join(Beer).where(
(UserBeer.username << self.following()) |
(UserBeer.username == self)).order_by(UserBeer.tried_date.desc()).limit(5)
問題を引き起こしているクエリの部分はself.following()
、sqlalchemy クエリがここで機能することを削除した場合の呼び出しです。そのクエリのコードは次のとおりです。self.following()
// SQLAlchmey
return Relationship.query.filter(Relationship.from_user == self)
//Peewee
return ( User.select().join(Relationship, on=Relationship.to_user).where(Relationship.from_user == self))
私は2つの異なることを求めている2番目のクエリを知っていますが、SQLAlchemyのモデルで関係を宣言しているようです。これは関係モデルです。正しいと思いますが、よくわかりません。また、私のユーザーモデルには、何かが欠けているかどうかわかりません。
class Relationship(db.Model):
id = db.Column(db.Integer, primary_key=True)
from_user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
to_user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
from_user = db.relationship('User', backref=db.backref('relationships', lazy='joined'), foreign_keys=from_user_id)
to_user = db.relationship('User', backref=db.backref('related_to', lazy='joined'), foreign_keys=to_user_id)
class User(UserMixin, db.Model):
__tablename__ = 'user'
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(), unique=True)
email = db.Column(db.String(), unique=True)
bio = db.Column(db.String(160))
password = db.Column(db.String(200))
joined_at = db.Column(db.DateTime(), default=datetime.datetime.now)
is_admin = db.Column(db.Boolean(), default=False)
roles = db.relationship('Role', secondary=roles_users,
backref=db.backref('users', lazy='dynamic'))
編集 エラー全体をもう一度見たときに役立つかもしれないと思いました
OperationalError: (_mysql_exceptions.OperationalError) (1241, 'Operand should contain 1 column(s)') [SQL: u'SELECT user_beer.id AS user_beer_id, user_beer.username_id AS user_beer_username_id, user_beer.beer_id AS user_beer_beer_id, user_beer.rating AS user_beer_rating, user_beer.description AS user_beer_description, user_beer.recommend AS user_beer_recommend, user_beer.tried_date AS user_beer_tried_date \nFROM user_beer \nWHERE user_beer.id < (SELECT relationship.id AS relationship_id, relationship.from_user_id AS relationship_from_user_id, relationship.to_user_id AS relationship_to_user_id \nFROM relationship \nWHERE %s = relationship.from_user_id) OR %s = user_beer.username_id ORDER BY user_beer.tried_date DESC \n LIMIT %s'] [parameters: (1L, 1L, 5)]