PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

xây dựng truy vấn động SQL với thư viện python psycopg2 và sử dụng các công cụ loại chuyển đổi tốt

Bạn đang cố gắng chuyển tên bảng làm tham số. Bạn có thể thấy điều này ngay lập tức nếu bạn chỉ nhìn vào nhật ký lỗi PostgreSQL.

Tên bảng mà bạn đang cố gắng chuyển qua psycopg2 khi một tham số đang được thoát, tạo ra một truy vấn như:

INSERT INTO E'my_table'(name, url, id, point_geom, poly_geom) VALUES (E'ST_GeomFromText(''POLYGON(( 52.146542 19.050557, 52.148430 19.045527, 52.149525 19.045831, 52.147400 19.050780, 52.147400 19.050780, 52.146542 19.050557))'',4326)');'

Đây không phải là những gì bạn dự định và sẽ không hiệu quả; bạn không thể thoát khỏi một tên bảng giống như một nghĩa đen. Bạn phải sử dụng nội suy chuỗi Python thông thường để tạo SQL động, bạn chỉ có thể sử dụng trình giữ chỗ câu lệnh được tham số hóa cho các giá trị chữ thực tế.

params = ('POLYGON(( 52.146542 19.050557, 52.148430 19.045527, 52.149525 19.045831, 52.147400 19.050780, 52.147400 19.050780, 52.146542 19.050557))',4326)
escaped_name = name.replace('"",'""')
curs.execute('INSERT INTO "%s"(name, url, id, point_geom, poly_geom) VALUES (ST_GeomFromText(%%s,%%s));' % escaped_name, params)

Xem cách tôi đã nội suy trực tiếp tên để tạo chuỗi truy vấn:

INSERT INTO my_table(name, url, id, point_geom, poly_geom) VALUES (ST_GeomFromText(%s,%s));

(%% được chuyển đổi thành % đơn giản bằng% thay thế). Sau đó, tôi đang sử dụng truy vấn đó với chuỗi xác định POLYGON và đối số khác cho ST_GeomFromText dưới dạng tham số truy vấn.

Tôi chưa kiểm tra điều này, nhưng nó sẽ cung cấp cho bạn ý tưởng đúng và giúp giải thích điều gì sai.

HÃY CẨN THẬN HẾT MÌNH khi thực hiện nội suy chuỗi như thế này, đó là một cách dễ dàng để chèn SQL. Tôi đã thực hiện trích dẫn rất thô sơ trong đoạn mã được hiển thị ở trên, nhưng tôi muốn sử dụng một hàm trích dẫn mã định danh thích hợp nếu thư viện khách hàng của bạn cung cấp một hàm.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách thiết lập cơ sở dữ liệu PostgreSQL trong Django

  2. Kết xuất postgres chỉ các phần của bảng để có ảnh chụp nhanh của nhà phát triển

  3. Các điều khoản cần biết:Tất cả về CHỌN, TỪ, ĐÂU, NHÓM THEO, CÓ, ĐẶT HÀNG THEO, và GIỚI HẠN

  4. Lỗi PostgreSQL 'Không thể kết nối với máy chủ:Không có tệp hoặc thư mục như vậy'

  5. Cách hiển thị cài đặt hiện tại cho đầu ra rỗng trong PostgreSQL (psql)