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

Thêm đối tượng dict vào postgresql

Nếu phiên bản PostgreSQL của bạn đủ mới (9.4+) và phiên bản psycopg> =2.5.4, tất cả các khóa đều là chuỗi và các giá trị có thể được biểu diễn dưới dạng JSON, tốt nhất bạn nên lưu trữ nó vào một cột JSONB. Sau đó, nếu nhu cầu phát sinh, cột cũng sẽ có thể tìm kiếm được. Chỉ cần tạo bảng đơn giản như

CREATE TABLE thetable (
    uuid TEXT,
    dict JSONB
);

(... và tự nhiên thêm chỉ mục, khóa chính, v.v. khi cần ...) Khi gửi từ điển đến PostgreSQL, bạn chỉ cần bọc nó bằng Json bộ chuyển đổi; khi nhận từ PostgreSQL, giá trị JSONB sẽ được tự động chuyển đổi thành từ điển, do đó việc chèn sẽ trở thành

from psycopg2.extras import Json, DictCursor

cur = conn.cursor(cursor_factory=DictCursor)

cur.execute('INSERT into thetable (uuid, dict) values (%s, %s)',
    ['testName', Json({'id':'122','name':'test','number':'444-444-4444'})])

và việc lựa chọn sẽ đơn giản như

cur.execute('SELECT dict FROM thetable where uuid = %s', ['testName'])
row = cur.fetchone()
print(row['dict']) # its now a dictionary object with all the keys restored
print(row['dict']['number']) # the value of the number key

Với JSONB, PostgreSQL có thể lưu trữ các giá trị hiệu quả hơn thay vì chỉ kết xuất từ ​​điển dưới dạng văn bản. Ngoài ra, có thể thực hiện các truy vấn với dữ liệu, ví dụ:chỉ cần chọn một số trường từ cột JSONB:

>>> cur.execute("SELECT dict->>'id', dict->>'number' FROM thetable")
>>> cur.fetchone()
['122', '444-444-4444']

hoặc bạn có thể sử dụng chúng trong các truy vấn nếu cần:

>>> cur.execute("SELECT uuid FROM thetable WHERE dict->>'number' = %s',
    ['444-444-4444'])
>>> cur.fetchall()
[['testName', {'id': '122', 'name': 'test', 'number': '444-444-4444'}]]


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Trả lại một truy vấn từ một hàm?

  2. Cách tìm một bảng có một cột cụ thể trong postgresql

  3. Truy vấn số lượng các giá trị riêng biệt trong một phạm vi ngày luân phiên

  4. PostgreSQL:CHÈN đa năng

  5. Tìm giá trị không chứa số trong PostgreSQL