如何在 sqlalchemy 中使用 sql NOT 运算符
How to use sql NOT operator in sqlalchemy
我有一个带有 int[] 列的简单 table,我希望能够 select 不包含指定用户的行。而且我无法弄清楚如何使用 SQLAlchemy 来做到这一点。我可以轻松地在 SQL 中提出请求:SELECT * FROM practices WHERE not (33 = any(id_user))
但不知道如何使用 Practice.query.filter(...)
这是 table(“实践”)的架构:
Column | Type |
--------------+------------------------+
id | integer |
some_data | character varying(250) |
id_user | integer[] |
示例数据如下所示:
id | some_data | id_user
----+--------------+---------------
1 | ------ | {25,33,42,55}
2 | ------ | {11,33,7,19}
3 | ------ | {32,6,20,23}
4 | ------ | {19,33,27,8}
5 | ------ | {25,33,10,40}
6 | ------ | {25,33,40,39}
7 | ------ | {1,20,18,38}
在我 运行 我的查询之后我想看到这个:
id | some_data | id_user
----+--------------+---------------
3 | ------ | {32,6,20,23}
7 | ------ | {1,20,18,38}
这是我用来生成 table 的 Python 代码:
class Practice(db.Model):
__tablename__ = "practices"
id = Column(Integer, primary_key=True)
id_user = Column(ARRAY(Integer))
some_data = Column(String(255))
def __init__(self, id_user, some_data):
self.id_user = id_user
self.id_coach = id_coach
self.id_coach = some_data
def details(self):
return {
'id': self.id,
'id_users': self.id_user,
'some_data': self.some_data
}
def insert(self):
db.session.add(self)
db.session.commit()
def delete(self):
db.session.delete(self)
db.session.commit()
def update(self):
db.session.commit()
query(Practice).filter(~Practice.id_user.contains([33])).all()
我有一个带有 int[] 列的简单 table,我希望能够 select 不包含指定用户的行。而且我无法弄清楚如何使用 SQLAlchemy 来做到这一点。我可以轻松地在 SQL 中提出请求:SELECT * FROM practices WHERE not (33 = any(id_user))
但不知道如何使用 Practice.query.filter(...)
这是 table(“实践”)的架构:
Column | Type |
--------------+------------------------+
id | integer |
some_data | character varying(250) |
id_user | integer[] |
示例数据如下所示:
id | some_data | id_user
----+--------------+---------------
1 | ------ | {25,33,42,55}
2 | ------ | {11,33,7,19}
3 | ------ | {32,6,20,23}
4 | ------ | {19,33,27,8}
5 | ------ | {25,33,10,40}
6 | ------ | {25,33,40,39}
7 | ------ | {1,20,18,38}
在我 运行 我的查询之后我想看到这个:
id | some_data | id_user
----+--------------+---------------
3 | ------ | {32,6,20,23}
7 | ------ | {1,20,18,38}
这是我用来生成 table 的 Python 代码:
class Practice(db.Model):
__tablename__ = "practices"
id = Column(Integer, primary_key=True)
id_user = Column(ARRAY(Integer))
some_data = Column(String(255))
def __init__(self, id_user, some_data):
self.id_user = id_user
self.id_coach = id_coach
self.id_coach = some_data
def details(self):
return {
'id': self.id,
'id_users': self.id_user,
'some_data': self.some_data
}
def insert(self):
db.session.add(self)
db.session.commit()
def delete(self):
db.session.delete(self)
db.session.commit()
def update(self):
db.session.commit()
query(Practice).filter(~Practice.id_user.contains([33])).all()