Hướng dẫn sql where in list python - sql ở đâu trong danh sách python

Tôi có một danh sách Python, nói L

l = [1,5,8]

Tôi muốn viết một truy vấn SQL để lấy dữ liệu cho tất cả các yếu tố của danh sách, giả sử

select name from students where id = |IN THE LIST l|

Làm thế nào để tôi hoàn thành điều này?

Hướng dẫn sql where in list python - sql ở đâu trong danh sách python

User12345

4.81012 Huy hiệu vàng49 Huy hiệu bạc103 Huy hiệu đồng12 gold badges49 silver badges103 bronze badges

Đã hỏi ngày 12 tháng 11 năm 2008 lúc 11:18Nov 12, 2008 at 11:18

Mohit Rankamohit RankaMohit Ranka

4.01312 Huy hiệu vàng41 Huy hiệu bạc41 Huy hiệu đồng12 gold badges41 silver badges41 bronze badges

2

Câu trả lời cho đến nay đã được tạo khuôn các giá trị thành một chuỗi SQL đơn giản. Điều đó hoàn toàn tốt cho các số nguyên, nhưng nếu chúng tôi muốn làm điều đó cho các chuỗi, chúng tôi sẽ gặp vấn đề thoát.

Đây là một biến thể sử dụng truy vấn được tham số hóa sẽ hoạt động cho cả hai:

placeholder= '?' # For SQLite. See DBAPI paramstyle.
placeholders= ', '.join(placeholder for unused in l)
query= 'SELECT name FROM students WHERE id IN (%s)' % placeholders
cursor.execute(query, l)

Hướng dẫn sql where in list python - sql ở đâu trong danh sách python

Đã trả lời ngày 12 tháng 11 năm 2008 lúc 12:30Nov 12, 2008 at 12:30

Bobincebobincebobince

520K103 Huy hiệu vàng648 Huy hiệu bạc827 Huy hiệu đồng103 gold badges648 silver badges827 bronze badges

16

Cách dễ nhất là chuyển danh sách thành

placeholder= '?' # For SQLite. See DBAPI paramstyle.
placeholders= ', '.join(placeholder for unused in l)
query= 'SELECT name FROM students WHERE id IN (%s)' % placeholders
cursor.execute(query, l)
9 trước

t = tuple(l)
query = "select name from studens where id IN {}".format(t)

Đã trả lời ngày 5 tháng 4 năm 2018 lúc 18:51Apr 5, 2018 at 18:51

Hướng dẫn sql where in list python - sql ở đâu trong danh sách python

14

Đừng làm phức tạp nó, giải pháp cho điều này là đơn giản.

l = [1,5,8]

l = tuple(l)

params = {'l': l}

cursor.execute('SELECT * FROM table where id in %(l)s',params)

Hướng dẫn sql where in list python - sql ở đâu trong danh sách python

Tôi hy vọng điều này đã giúp !!!

Đã trả lời ngày 22 tháng 11 năm 2016 lúc 9:01Nov 22, 2016 at 9:01

AllsyedallyedALLSYED

1.45317 Huy hiệu bạc14 Huy hiệu đồng17 silver badges14 bronze badges

9

SQL bạn muốn là

select name from studens where id in (1, 5, 8)

Nếu bạn muốn xây dựng điều này từ Python, bạn có thể sử dụng

l = [1, 5, 8]
sql_query = 'select name from studens where id in (' + ','.join(map(str, l)) + ')'

Hàm bản đồ sẽ chuyển đổi danh sách thành một danh sách các chuỗi có thể được dán lại bằng dấu phẩy bằng phương pháp str.join.

Alternatively:

l = [1, 5, 8]
sql_query = 'select name from studens where id in (' + ','.join((str(n) for n in l)) + ')'

Nếu bạn thích các biểu thức tạo ra chức năng bản đồ.

CẬP NHẬT: S. Lott đề cập đến trong các nhận xét rằng các ràng buộc Python SQLite không hỗ trợ các chuỗi. Trong trường hợp đó, bạn có thể muốn

select name from studens where id = 1 or id = 5 or id = 8

Được tạo bởi

sql_query = 'select name from studens where ' + ' or '.join(('id = ' + str(n) for n in l))

Đã trả lời ngày 12 tháng 11 năm 2008 lúc 11:52Nov 12, 2008 at 11:52

Blair Conradblair ConradBlair Conrad

226K25 Huy hiệu vàng132 Huy hiệu bạc111 Huy hiệu đồng25 gold badges132 silver badges111 bronze badges

3

String.Join Các giá trị danh sách được phân tách bằng dấu phẩy và sử dụng toán tử định dạng để tạo thành chuỗi truy vấn.

select name from students where id = |IN THE LIST l|
0

(Cảm ơn, Blair-Conrad)

Đã trả lời ngày 12 tháng 11 năm 2008 lúc 11:49Nov 12, 2008 at 11:49

Gimelgimelgimel

80,7K10 Huy hiệu vàng74 Huy hiệu bạc104 Huy hiệu đồng10 gold badges74 silver badges104 bronze badges

1

Tôi thích câu trả lời của Bobince:

placeholder= '?' # For SQLite. See DBAPI paramstyle.
placeholders= ', '.join(placeholder for unused in l)
query= 'SELECT name FROM students WHERE id IN (%s)' % placeholders
cursor.execute(query, l)

Nhưng tôi nhận thấy điều này:

select name from students where id = |IN THE LIST l|
2

Có thể được thay thế bằng:

select name from students where id = |IN THE LIST l|
3

Tôi thấy điều này trực tiếp hơn nếu ít thông minh và ít chung chung hơn. Ở đây

t = tuple(l)
query = "select name from studens where id IN {}".format(t)
0 được yêu cầu phải có độ dài (nghĩa là tham khảo một đối tượng xác định phương thức
t = tuple(l)
query = "select name from studens where id IN {}".format(t)
1), không phải là vấn đề. Nhưng người giữ chỗ cũng phải là một nhân vật duy nhất. Để hỗ trợ sử dụng trình giữ chỗ đa nhân vật:

select name from students where id = |IN THE LIST l|
4

Đã trả lời ngày 20 tháng 11 năm 2010 lúc 14:35Nov 20, 2010 at 14:35

Jimharkjimharkjimhark

4,8881 Huy hiệu vàng25 Huy hiệu bạc26 Huy hiệu đồng1 gold badge25 silver badges26 bronze badges

Nếu bạn đang sử dụng PostgreSQL với thư viện PSYCOPG2, bạn có thể để sự thích nghi của nó thực hiện tất cả các phép nội suy thoát và chuỗi cho bạn, ví dụ::

select name from students where id = |IN THE LIST l|
5

tức là chỉ cần đảm bảo rằng bạn đang chuyển tham số

t = tuple(l)
query = "select name from studens where id IN {}".format(t)
2 dưới dạng
placeholder= '?' # For SQLite. See DBAPI paramstyle.
placeholders= ', '.join(placeholder for unused in l)
query= 'SELECT name FROM students WHERE id IN (%s)' % placeholders
cursor.execute(query, l)
9. Nếu đó là
t = tuple(l)
query = "select name from studens where id IN {}".format(t)
4, bạn có thể sử dụng cú pháp mảng
t = tuple(l)
query = "select name from studens where id IN {}".format(t)
5:

select name from students where id = |IN THE LIST l|
6

Lưu ý rằng cả hai sẽ được biến thành cùng một kế hoạch truy vấn, vì vậy bạn chỉ nên sử dụng tùy ý nào dễ dàng hơn. ví dụ. Nếu danh sách của bạn đi kèm, hãy sử dụng cái trước, nếu chúng được lưu trữ trong danh sách, hãy sử dụng phần sau.

Đã trả lời ngày 18 tháng 12 năm 2019 lúc 20:56Dec 18, 2019 at 20:56

Sam Masonsam MasonSam Mason

Huy hiệu vàng 14K11 gold badge36 silver badges55 bronze badges

Giải pháp cho câu trả lời @Umounted, bởi vì điều đó đã phá vỡ với một tuple một phần tử, vì (1,) không phải là SQL hợp lệ .:

select name from students where id = |IN THE LIST l|
7

Giải pháp khác cho chuỗi SQL:

select name from students where id = |IN THE LIST l|
8

Đã trả lời ngày 26 tháng 11 năm 2014 lúc 9:16Nov 26, 2014 at 9:16

XIMIXXIXIXXimix

4013 Huy hiệu bạc10 Huy hiệu đồng3 silver badges10 bronze badges

1

Chỉ cần sử dụng nội tuyến nếu hoạt động với chức năng Tuple:

select name from students where id = |IN THE LIST l|
9

Đã trả lời ngày 23 tháng 9 năm 2020 lúc 9:13Sep 23, 2020 at 9:13

Hướng dẫn sql where in list python - sql ở đâu trong danh sách python

Người cai trị tham lamGreed Ruler

Huy hiệu Huy hiệu 1491 Bạc141 silver badge14 bronze badges

1

Để chạy chọn từ trường trong danh sách các chuỗi (thay vì int), theo câu hỏi này, sử dụng

t = tuple(l)
query = "select name from studens where id IN {}".format(t)
6. Ví dụ đầy đủ:

placeholder= '?' # For SQLite. See DBAPI paramstyle.
placeholders= ', '.join(placeholder for unused in l)
query= 'SELECT name FROM students WHERE id IN (%s)' % placeholders
cursor.execute(query, l)
0

Trả lại:

t = tuple(l)
query = "select name from studens where id IN {}".format(t)
7

Đối với một danh sách các ngày trong Oracle, điều này đã hoạt động

placeholder= '?' # For SQLite. See DBAPI paramstyle.
placeholders= ', '.join(placeholder for unused in l)
query= 'SELECT name FROM students WHERE id IN (%s)' % placeholders
cursor.execute(query, l)
1

Trả lại:

t = tuple(l)
query = "select name from studens where id IN {}".format(t)
8

Đã trả lời ngày 25 tháng 11 năm 2020 lúc 4:27Nov 25, 2020 at 4:27

Hướng dẫn sql where in list python - sql ở đâu trong danh sách python

CityNormancitynormancitynorman

4.5302 Huy hiệu vàng35 Huy hiệu bạc38 Huy hiệu Đồng2 gold badges35 silver badges38 bronze badges

1

placeholder= '?' # For SQLite. See DBAPI paramstyle.
placeholders= ', '.join(placeholder for unused in l)
query= 'SELECT name FROM students WHERE id IN (%s)' % placeholders
cursor.execute(query, l)
2

Điều này sẽ giải quyết vấn đề của bạn.

Đã trả lời ngày 12 tháng 2 năm 2019 lúc 9:21Feb 12, 2019 at 9:21

Hướng dẫn sql where in list python - sql ở đâu trong danh sách python

Một giải pháp đơn giản hơn:

placeholder= '?' # For SQLite. See DBAPI paramstyle.
placeholders= ', '.join(placeholder for unused in l)
query= 'SELECT name FROM students WHERE id IN (%s)' % placeholders
cursor.execute(query, l)
3

Đã trả lời ngày 22 tháng 4 năm 2019 lúc 22:59Apr 22, 2019 at 22:59

Hướng dẫn sql where in list python - sql ở đâu trong danh sách python

Omar Omariomar omeiriOmar Omeiri

1.1481 Huy hiệu vàng14 Huy hiệu bạc27 Huy hiệu đồng1 gold badge14 silver badges27 bronze badges

placeholder= '?' # For SQLite. See DBAPI paramstyle.
placeholders= ', '.join(placeholder for unused in l)
query= 'SELECT name FROM students WHERE id IN (%s)' % placeholders
cursor.execute(query, l)
4

Ký hiệu

t = tuple(l)
query = "select name from studens where id IN {}".format(t)
9 có vẻ đơn giản hơn. (Python 3.7)

Đã trả lời ngày 26 tháng 5 năm 2020 lúc 14:23May 26, 2020 at 14:23

user13476428user13476428user13476428

Huy hiệu vàng 611 Huy hiệu bạc3 Huy hiệu đồng1 gold badge1 silver badge3 bronze badges

Điều này sẽ hoạt động nếu số lượng giá trị trong danh sách bằng 1 hoặc lớn hơn 1

placeholder= '?' # For SQLite. See DBAPI paramstyle.
placeholders= ', '.join(placeholder for unused in l)
query= 'SELECT name FROM students WHERE id IN (%s)' % placeholders
cursor.execute(query, l)
5

Đã trả lời ngày 27 tháng 8 năm 2020 lúc 16:48Aug 27, 2020 at 16:48

Rajrajraj

1661 Huy hiệu bạc9 Huy hiệu đồng1 silver badge9 bronze badges

Ví dụ: nếu bạn muốn truy vấn SQL:

select name from studens where id in (1, 5, 8)

Thế còn:

placeholder= '?' # For SQLite. See DBAPI paramstyle.
placeholders= ', '.join(placeholder for unused in l)
query= 'SELECT name FROM students WHERE id IN (%s)' % placeholders
cursor.execute(query, l)
7

Đã trả lời ngày 18 tháng 8 năm 2016 lúc 18:02Aug 18, 2016 at 18:02

Hướng dẫn sql where in list python - sql ở đâu trong danh sách python

Pgalileapgalileapgalilea

2412 Huy hiệu bạc5 Huy hiệu Đồng2 silver badges5 bronze badges

Điều này sử dụng thay thế tham số và chăm sóc trường hợp danh sách giá trị đơn lẻ:

placeholder= '?' # For SQLite. See DBAPI paramstyle.
placeholders= ', '.join(placeholder for unused in l)
query= 'SELECT name FROM students WHERE id IN (%s)' % placeholders
cursor.execute(query, l)
8

Đã trả lời ngày 28 tháng 6 năm 2018 lúc 22:08Jun 28, 2018 at 22:08