Sqlalchemy straipsnis

Bandau atlikti šį užklausą sqlalchemy

 SELECT id, name FROM user WHERE id in (123,456) 

Noriu susieti sąrašą [123,456] vykdymo metu.

123
22 дек. wonzbak nustatytas gruodžio 22 d 2011-12-22 14:16 '11, 14:16, 2011-12-22 14:16
@ 5 atsakymai

Kaip apie session.query(MyUserClass).filter(MyUserClass.id.in_((123,456))).all() ?

redaguoti . Be ORM bus

 session.execute( select( [MyUserTable.c.id, MyUserTable.c.name], MyUserTable.c.id.in_((123, 456)) ) ).fetchall() 

select() du parametrus, pirmasis yra laukų, kuriuos norite nuskaityti, sąrašas, antrasis - sąlyga, where . Visus lentelės objekto laukus galite pasiekti per c (arba columns ) turtą.

154
22 дек. Simonas atsakė gruodžio 22 dieną. 2011-12-22 14:20 '11, 14:20, 2011-12-22 14:20

Darant prielaidą, kad naudojate deklaracinį stilių (t. Y. ORM klases), tai gana paprasta:

 query = db_session.query(User.id, User.name).filter(User.id.in_([123,456])) results = query.all() 

db_session čia yra jūsų duomenų bazės sesija, o User yra ORM klasė su __tablename__ lygiu "users" .

86
22 дек. Atsakymas duotas Xion 22 Dec. 2011-12-22 14:23 '11, 14:23, 2011-12-22 14:23

Alternatyvus būdas yra naudoti pradinį SQL režimą su SQLAlchemy, aš naudoju SQLAlchemy 0.9.8, 2.7 python, MySQL 5.X ir MySQL-Python kaip jungtis, šiuo atveju reikalinga paketas. Toliau pateikiamas mano kodas:

 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() 

Tikiuosi, kad viskas veikia jums.

12
08 апр. atsakymas pateiktas Jet Yang 08 balandžio. 2015-04-08 07:33 '15 at 7:33 2015-04-08 07:33

Tiesiog pridėkite aukščiau pateiktus atsakymus.

Jei norite vykdyti SQL su instrukcija „IN“, galite tai padaryti:

 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) 

Du taškai:

  • IN instrukcijai nereikia parentezės (pvz., "... IN (% s)"), tiesiog įveskite "... IN% s"
  • Padarykite savo ID sąrašą vienu iš eilutės elementų. Nepamirškite ",": (ids_list,)

PAKEITIMAS Įsitikinkite, kad jei sąrašo ilgis yra vienas arba nulis, tai sukels klaidą!

4
07 авг. atsakymas pateikiamas Majid 07 rug. 2013-08-07 00:00 '13, 0:00 2013-08-07 00:00

Naudodamiesi API išraiška, kuri prašo šio klausimo pagal komentarus, galite naudoti atitinkamą stulpelį in_ metodas.

Prašymas

 SELECT id, name FROM user WHERE id in (123,456) 

naudoti

 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) 

Tai reiškia, kad user_table ir conn apibrėžti.

4
19 нояб. Carl atsakė 19 lapkričio. 2013-11-19 22:01 '13, 10:01 pm 2013-11-19 22:01

Kiti klausimai apie arba Užduoti klausimą