जवाबों:
कैसा रहेगा
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यहाँ आपका डेटाबेस सत्र है, जबकि UserORM वर्ग के __tablename__बराबर है "users"।
~( ~User.id.in_([123,456])) या not_से sqlalchemy.sql.expression( not_(User.id.in_([123,456])))।
एक वैकल्पिक तरीका SQLAlchemy के साथ कच्चे SQL मोड का उपयोग कर रहा है, मैं SQLAlchemy 0.9.8, अजगर 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()
आशा है कि सब कुछ आपके लिए काम करता है।
अभिव्यक्ति एपीआई के साथ, जो टिप्पणियों पर आधारित है कि यह प्रश्न क्या पूछ रहा है, आप 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उचित रूप से परिभाषित किया गया है।
बस अपने समाधान का उपयोग करना चाहता था python 3 में sqlalchemy और पांडा का उपयोग करके 3. शायद, कोई इसे उपयोगी पाएगा।
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)
उपरोक्त उत्तरों के लिए बस एक अतिरिक्त।
यदि आप एक SQL को "IN" स्टेटमेंट के साथ निष्पादित करना चाहते हैं, तो आप ऐसा कर सकते हैं:
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)
दो बिंदु:
EDIT यह देखें कि यदि सूची की लंबाई एक या शून्य है तो यह त्रुटि उत्पन्न करेगा!
args = [(tuple(ids_list),)], कृपया दोहरी जांच करें।
(item, )और यह SQL में गलत है