2011-12-27 32 views
11

chứa phương pháp, nhưng có nghĩa là: WHERE field LIKE '%10%'. Và tôi cần chính xác WHERE field LIKE '10__8__0__'.Truy vấn Django cách viết: WHERE field LIKE '10__8__0__'?

Cảm ơn!

EDIT:

Ý tôi là chuỗi là '10xx8xx0xx', trong đó x - bất kỳ biểu tượng

+1

làm điều đó bằng 'raw', https://docs.djangoproject.com/en/dev/topics/db/sql/#django.db.models.Manager.raw – Ahsan

Trả lời

13

Bạn có thể làm điều này với django-like:

MyModel.objects.filter(field__like='10%8%0%') 

Ngoài ra tôi đã tạo ra một vé liên quan trên Django project site

+0

Xin lỗi, tôi quên làm rõ những gì tôi muốn làm. Xem EDIT của tôi –

+0

Điều này làm việc, nhưng kể từ khi tôi sẽ tìm kiếm '% query%', tôi quyết định chỉ sử dụng field__contains – radtek

+0

Điều này là linh hoạt hơn __contains, tại sao nó không được bao gồm trong Django theo mặc định? nó nên được thêm vào trong django và không thay thế __contains. –

5

Cách dễ nhất để thực hiện tìm kiếm bạn định làm là thường xuyên biểu hiện:

MyModel.objects.filter(field__regex=r'^10..8..0..$') 

Edit:

Giải pháp của tôi là có thể chậm hơn nhiều so với LIKE. Vấn đề là mặc dù ORMA django không cho phép truy cập dễ dàng đến LIKE. Nó sẽ là dễ nhất nếu startswith hoặc endswith là đủ cho các mục đích của bạn.

+0

Nó chậm hơn nhiều so với 'LIKE', ít nhất là đối với MySQL. – DrTyrsa

+0

Tính năng này hoạt động nhưng không hiệu quả như mong muốn. Tại sao không tồn tại một cái gì đó như thế này? MyModel.objects.filter (field__like = '10% 8 & 0% '). Nếu ORM không scape chuỗi bạn có thể làm điều này: MyModel.objects.filter (field = '10% 8 & 0% ') – Goin

+0

@DrTyrsa là chậm hơn nhiều, nhưng nó cũng là giải pháp của bạn o_O. Giải pháp của bạn sau giải pháp Till-Backhaus – Goin

-1

Trong SQL, bạn có thể truy vấn nó thích:

WHERE field LIKE '10??8??0??' 

Hãy thử điều đó trong bộ lọc Django của bạn.

+0

Điều này là không thể với các tra cứu mặc định trong django.Trước khi tôi thực hiện giống như django http://pypi.python.org/pypi/django-like – Goin

4

Bạn có thể sử dụng extra để làm điều này:

MyModel.objects.extra(where=["column_name LIKE '%10%"]) 

Lưu ý rằng column_name là tên cột trong cơ sở dữ liệu, chứ không phải là tên trường trong mô hình Django của bạn. Trong nhiều trường hợp, tên trường và tên cột sẽ giống nhau, nhưng nếu chúng khác nhau, hãy cẩn thận để sử dụng tên cột.

Các vấn đề liên quan