2016-03-18 15 views
19

Tôi đang sử dụng PyCharm và tôi có một lỗi trên câu lệnh SQL này:Làm cách nào để PyCharm nhận ra trình giữ chỗ trong câu lệnh SQL?

SELECT * FROM table WHERE id= %(id)s 

Việc kiểm tra cú pháp mã nói:

<expression> expected, got '%' 

Có cách nào để vô hiệu hóa thông báo lỗi này? Nói cách khác, làm cách nào để làm cho PyCharm nhận ra trình giữ chỗ trong câu lệnh SQL?

Sửa

Đây là giải pháp của tôi:

Đối %(id)s%s bạn phải có %\((\w+)\)s%s trong Settings/Preferences | Tools | Database | User parameters và chọn All languages không chỉ SQL

+0

'Cài đặt/Tuỳ chọn | Công cụ | Cơ sở dữ liệu | Thông số người dùng' - bạn có thể thêm mẫu thông số tùy chỉnh tại đó. Ngoài ra hãy đảm bảo rằng các tùy chọn 'Bật ...' thích hợp được bật. – LazyOne

+0

Cảm ơn! Tôi đã thử mẫu này nhưng nó không hoạt động: '\% \ (([^ $ \ (\)] *) \) \ s' Bạn có ý tưởng không? –

+1

Tôi nghĩ rằng các dấu ngoặc '()' trong phần giữ chỗ thực '% (id) s' là những gì làm cho nó phá vỡ. Tôi đã thử vài thứ và không ai trong số họ làm việc. Hiện tại, tôi chỉ có thể đề xuất gửi vé hỗ trợ chính thức tại https://intellij-support.jetbrains.com/hc/en-us/requests/new – LazyOne

Trả lời

22

là SQL này trong SQL console , hoặc trong một chuỗi trong một kịch bản Python? Tôi đã có cùng một vấn đề này và giải quyết nó bằng cách chọn hộp bên trên danh sách các mẫu, có nhãn "Bật trong chuỗi ký tự bằng SQL injection". Nếu bạn đang làm điều này trong một cửa sổ giao diện điều khiển SQL, hãy chọn hộp đầu tiên.

Như ghi chú @LazyOne, đi đến Settings/Preferences > Tools > Database > User Parameters và bạn sẽ thấy hai hộp kiểm ở đầu trang:
Enable in console and SQL files
Enable in string literals with SQL injection

Trong khi bạn có thể thêm patters tùy chỉnh của riêng bạn, tôi tin rằng mô hình phù hợp với tham số này cú pháp (đối với tôi, các tham số cho psycopg2 để sử dụng trong Postgres) là out-of-the-box trong Pycharm, thông số cuối cùng trong danh sách.

Xem ở đây để tham khảo:
https://www.jetbrains.com/help/pycharm/2016.1/user-parameters.html

0

Ngoài @ câu trả lời của Nate (built-in regex %\((\w+)\)s làm việc cho PostgreSQL), tôi đã quản lý để có được công việc này chỉ qua sắp xếp lại các mô hình và di chuyển mục tiêu regex lên đầu danh sách.

Bạn cũng có thể thử vô hiệu hóa các quy tắc khác và xem điều đó có hữu ích không.

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