SQL Chemy IN 조항
squalchemy에서 이 쿼리를 수행하려고 합니다.
SELECT id, name FROM user WHERE id IN (123, 456)
리스트를 바인드하고 싶습니다.[123, 456]
실행 시.
어때.
session.query(MyUserClass).filter(MyUserClass.id.in_((123,456))).all()
편집: ORM이 없으면
session.execute(
select(
[MyUserTable.c.id, MyUserTable.c.name],
MyUserTable.c.id.in_((123, 456))
)
).fetchall()
select()
첫 번째 파라미터는 취득할 필드 리스트이고 두 번째 파라미터는 취득할 필드 리스트입니다.where
조건.테이블 오브젝트의 모든 필드에 액세스하려면c
(또는columns
)의 속성입니다.
선언적 스타일(즉, ORM 클래스)을 사용한다고 가정하면, 다음과 같이 매우 간단합니다.
query = db_session.query(User.id, User.name).filter(User.id.in_([123,456]))
results = query.all()
db_session
데이터베이스 세션이 여기에 있는 동안User
에서의 ORM 클래스입니다.__tablename__
에 필적"users"
.
또 하나의 방법은 SQL Chemy에서 raw SQL 모드를 사용하는 것입니다. SQL Chemy 0.9.8, python 2.7, MySQL 5.X 및 MySQL-Python을 커넥터로 사용합니다.이 경우 태플이 필요합니다.코드 리스트는 다음과 같습니다.
id_list = [1, 2, 3, 4, 5] # in most case we have an integer list or set
s = text('SELECT id, content FROM myTable WHERE id IN :id_list')
conn = engine.connect() # get a mysql connection
rs = conn.execute(s, id_list=tuple(id_list)).fetchall()
모든 일이 잘 되길 바랍니다.
비단뱀 3의 sqalchemy와 panda를 사용한 솔루션을 공유하려고 합니다.아마도, 누군가는 그것이 유용하다고 생각할 것이다.
import sqlalchemy as sa
import pandas as pd
engine = sa.create_engine("postgresql://postgres:my_password@my_host:my_port/my_db")
values = [val1,val2,val3]
query = sa.text("""
SELECT *
FROM my_table
WHERE col1 IN :values;
""")
query = query.bindparams(values=tuple(values))
df = pd.read_sql(query, engine)
이 질문에 대한 코멘트를 기반으로 한 표현 API를 사용하면in_
해당 컬럼의 메서드.
문의하다
SELECT id, name FROM user WHERE id in (123,456)
사용하다
myList = [123, 456]
select = sqlalchemy.sql.select([user_table.c.id, user_table.c.name], user_table.c.id.in_(myList))
result = conn.execute(select)
for row in result:
process(row)
이것은 다음과 같은 것을 전제로 한다.user_table
그리고.conn
적절하게 정의되어 있습니다.
이 질문에는 선택 쿼리에 대한 솔루션이 게시되어 있지만 업데이트 쿼리에 대해서는 작동하지 않습니다.이렇게 하면 조건 선택에도 도움이 됩니다.이건 나한테 효과가 있었어.
솔루션:
id_list = [1, 2, 3, 4, 5] # in most case we have an integer list or set
query = 'update myTable set content = 1 WHERE id IN {id_list}'.format(id_list=tuple(id_list))
conn.execute(query)
위의 답변에 대한 추가 정보입니다.
"IN" 문을 사용하여 SQL을 실행하는 경우 다음을 수행할 수 있습니다.
ids_list = [1,2,3]
query = "SELECT id, name FROM user WHERE id IN %s"
args = [(ids_list,)] # Don't forget the "comma", to force the tuple
conn.execute(query, args)
두 가지 포인트:
- IN 문에는 괄호가 필요 없습니다(예: "...").입력(%s "), 그냥...입력: %s"
- ID 목록을 강제로 태플의 1개 요소로 만듭니다., : (ids_list,
편집 목록의 길이가 1 또는 0인 경우 오류가 발생하는지 주의하십시오.
언급URL : https://stackoverflow.com/questions/8603088/sqlalchemy-in-clause
'programing' 카테고리의 다른 글
자바어로 뮤텍스와 세마포어가 뭐죠?주된 차이점은 무엇입니까? (0) | 2023.01.01 |
---|---|
JavaScript에서 스택과 큐를 구현하려면 어떻게 해야 합니까? (0) | 2023.01.01 |
Mac OS 10.6(Snow Leopard), 10.7(Lion), 10.8(Mountain Lion)에서 PHP와 MySQL을 활성화하는 가장 쉬운 방법은 무엇입니까? (0) | 2023.01.01 |
C 프로그램이 MySQL 프로시저에서 결과 값을 가져올 수 없습니다. (0) | 2023.01.01 |
int 유형의 리터럴 xyz가 범위를 벗어났습니다. (0) | 2023.01.01 |