programing

SQL Chemy IN 조항

bestcode 2023. 1. 1. 11:12
반응형

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

반응형