I have a simple table with an int[] column and I would like to be able to select rows that do not contain a specified user. And I can’t figure out how to do it with SQLAlchemy. I could easily make a request in SQL: SELECT * FROM practices WHERE not (33 = any(id_user)) but have no idea how to do it using Practice.query.filter(...)
Here is the schema for the table (“practices”):
Column | Type | --------------+------------------------+ id | integer | some_data | character varying(250) | id_user | integer[] |
Here is what it looks like with sample data:
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}
After i run my query i want to see this:
id | some_data | id_user
----+--------------+---------------
3 | ------ | {32,6,20,23}
7 | ------ | {1,20,18,38}
Here is the Python code I used to generate the table:
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()
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 1
query(Practice).filter(~Practice.id_user.contains([33])).all()
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0