Hướng dẫn how to insert json data into oracle table using python - cách chèn dữ liệu json vào bảng oracle bằng python

mọi người. Tôi đang gặp sự cố khi làm việc với các tệp JSON. Tôi có một danh sách dữ liệu JSON như vậy, làm thế nào tôi có thể chèn dữ liệu này vào bảng? Mã Python:

with open('object.json') as f:
    json_obj = json.load(f)
print(json_obj)

for i in enumerate(json_obj):
    id = validate_string(item.get("id", None))
    LAST_NAME = validate_string(item.get("LAST_NAME", None))
    FIRST_NAME = validate_string(item.get("FIRST_NAME", None))
cursor.execute("insert into EMPLOYEES (id,LAST_NAME,FIRST_NAME) VALUES (:1,:2,:3)", (id,LAST_NAME,FIRST_NAME))
conn.close

JSON Một số ngày trong tệp (Object.json):

[{"ID": 1, "LAST_NAME": "Alex", "FIRST_NAME": "Pip"}, 
{"ID": 2, "LAST_NAME": "John", "FIRST_NAME": "Alan"},
{"ID": 3, "LAST_NAME": "Dehan", "FIRST_NAME": "Luck"},
{"ID": 4, "LAST_NAME": "Nick", "FIRST_NAME": "Adem"},
{"ID": 5, "LAST_NAME": "Aspen", "FIRST_NAME": "Turit"}]

DatabaseError: ORA-00904: "ID": Định danh không hợp lệ

Hỗ trợ bản địa cho dữ liệu JSON đã được giới thiệu trong cơ sở dữ liệu Oracle 12c. Bạn có thể sử dụng JSON với các tính năng cơ sở dữ liệu quan hệ, bao gồm các giao dịch, lập chỉ mục, truy vấn khai báo và chế độ xem. Bạn có thể chiếu dữ liệu JSON một cách quan hệ, làm cho nó có sẵn cho các quy trình và công cụ quan hệ. Cũng xem Truy cập tài liệu Oracle đơn giản (SODA), cho phép truy cập vào các tài liệu JSON thông qua một bộ API kiểu NoQuery.Simple Oracle Document Access (SODA), which allows access to JSON documents through a set of NoSQL-style APIs.

Trước cơ sở dữ liệu Oracle 21, JSON trong các bảng quan hệ được lưu trữ dưới dạng dữ liệu Blob, Clob hoặc Varchar2, cho phép dễ dàng truy cập với CX_ORACLE. Cơ sở dữ liệu Oracle 21 đã giới thiệu một loại dữ liệu JSON chuyên dụng với định dạng lưu trữ nhị phân mới giúp cải thiện hiệu suất và chức năng. Để sử dụng loại JSON chuyên dụng mới, Cơ sở dữ liệu Oracle và Thư viện máy khách Oracle phải là phiên bản 21 hoặc muộn hơn. Ngoài ra CX_Oracle phải là 8.1 hoặc muộn hơn.

Để biết thêm thông tin về việc sử dụng JSON trong cơ sở dữ liệu Oracle, hãy, hãy xem Hướng dẫn Nhà phát triển Cơ sở dữ liệu JSON.

Trong cơ sở dữ liệu Oracle 21, để tạo một bảng với một cột có tên

[{"ID": 1, "LAST_NAME": "Alex", "FIRST_NAME": "Pip"}, 
{"ID": 2, "LAST_NAME": "John", "FIRST_NAME": "Alan"},
{"ID": 3, "LAST_NAME": "Dehan", "FIRST_NAME": "Luck"},
{"ID": 4, "LAST_NAME": "Nick", "FIRST_NAME": "Adem"},
{"ID": 5, "LAST_NAME": "Aspen", "FIRST_NAME": "Turit"}]
5 cho dữ liệu JSON:

create table customers (
    id integer not null primary key,
    json_data json
);

Đối với các phiên bản cơ sở dữ liệu Oracle cũ hơn, cú pháp là:

create table customers (
    id integer not null primary key,
    json_data blob check (json_data is json)
);

Ràng buộc kiểm tra với mệnh đề

[{"ID": 1, "LAST_NAME": "Alex", "FIRST_NAME": "Pip"}, 
{"ID": 2, "LAST_NAME": "John", "FIRST_NAME": "Alan"},
{"ID": 3, "LAST_NAME": "Dehan", "FIRST_NAME": "Luck"},
{"ID": 4, "LAST_NAME": "Nick", "FIRST_NAME": "Adem"},
{"ID": 5, "LAST_NAME": "Aspen", "FIRST_NAME": "Turit"}]
6 đảm bảo chỉ có dữ liệu JSON được lưu trữ trong cột đó.

Cú pháp cũ hơn vẫn có thể được sử dụng trong cơ sở dữ liệu Oracle 21, tuy nhiên khuyến nghị là chuyển sang loại JSON mới. Với cú pháp cũ, lưu trữ có thể là Blob, Clob hoặc Varchar2. Trong số này, Blob được ưu tiên để tránh các chi phí chuyển đổi bộ ký tự.

Sử dụng cơ sở dữ liệu Oracle 21 và Oracle Client 21 với cx_oracle 8.1 (hoặc sau này), bạn có thể chèn bằng cách ràng buộc như được hiển thị bên dưới:

import datetime

json_data = [
    2.78,
    True,
    'Ocean Beach',
    b'Some bytes',
    {'keyA': 1, 'KeyB': 'Melbourne'},
    datetime.date.today()
]

var = cursor.var(cx_Oracle.DB_TYPE_JSON)
var.setvalue(0, json_data)
cursor.execute("insert into customers values (:1, :2)", [123, var])

# or these two lines can replace the three previous lines
cursor.setinputsizes(None, cx_Oracle.DB_TYPE_JSON)
cursor.execute("insert into customers values (:1, :2)", [123, json_data])

Hấp thụ với:

for row in cursor.execute("SELECT c.json_data FROM customers c"):
    print(row)

Cung cấp đầu ra như:

([Decimal('2.78'), True, 'Ocean Beach',
    b'Some bytes',
    {'keyA': Decimal('1'), 'KeyB': 'Melbourne'},
    datetime.datetime(2020, 12, 2, 0, 0)],)

Với bộ lưu trữ BLOB cũ hơn hoặc để chèn các chuỗi JSON, sử dụng:

import json

customer_data = dict(name="Rod", dept="Sales", location="Germany")
cursor.execute("insert into customers (id, json_data) values (:1, :2)",
               [1, json.dumps(customer_data)])

Trong bản đồ loại liên kết

Khi liên kết với giá trị JSON, tham số loại cho biến phải được chỉ định là

[{"ID": 1, "LAST_NAME": "Alex", "FIRST_NAME": "Pip"}, 
{"ID": 2, "LAST_NAME": "John", "FIRST_NAME": "Alan"},
{"ID": 3, "LAST_NAME": "Dehan", "FIRST_NAME": "Luck"},
{"ID": 4, "LAST_NAME": "Nick", "FIRST_NAME": "Adem"},
{"ID": 5, "LAST_NAME": "Aspen", "FIRST_NAME": "Turit"}]
7. Các giá trị Python được chuyển đổi thành các giá trị JSON như trong bảng sau. Có thể sử dụng cú pháp tương đương SQL SQL trong các câu lệnh SQL Chèn và cập nhật nếu các loại thuộc tính cụ thể là cần thiết nhưng không có ánh xạ trực tiếp từ Python.

Loại python hoặc giá trị

Loại thuộc tính hoặc giá trị JSON

Ví dụ tương đương SQL

Không có

null

VÔ GIÁ TRỊ

ĐÚNG VẬY

true

n/a

Sai

false

n/a

int

CON SỐ

json_scalar(1)

float

CON SỐ

json_scalar(1)

decimal.Decimal

CON SỐ

json_scalar(1)

str

VARCHAR2

json_scalar (‘chuỗi,)

datetime.date

Dấu thời gian

json_scalar (to_timestamp (‘2020-03-10,‘ yyyy-mm-dd,)))

datetime.datetime

Dấu thời gian

json_scalar (to_timestamp (‘2020-03-10,‘ yyyy-mm-dd,)))

Byte

Thô

JSON_SCALAR (UTL_RAW.CAST_TO_RAW (‘Một giá trị thô)))

danh sách

Mảng

json_array (1, 2, 3 trả lại json)

DIGN

Sự vật

JSON_OBject (Khóa ‘Fred Giá trị JSON_SCALAR (5), khóa‘ George, giá trị JSON_SCALAR (‘A String,) trả về JSON)

n/a

Clob

json_scalar (to_clob (‘một clob ngắn))

n/a

BÃI

json_scalar (to_blob (UTL_RAW.CAST_TO_RAW (‘A ngắn Blob,))))

n/a

NGÀY

json_scalar (to_date (‘2020-03-10,‘ yyyy-mm-dd,)))

n/a

Khoảng thời gian năm này sang tháng khác

json_scalar (to_yminterval (‘+5-9,)))

n/a

Khoảng thời gian đến thứ hai

json_scalar (to_dsinterval (‘p25dt8h25m,)))

n/a

BINARY_DOUBLE

json_scalar(to_binary_double(25))

n/a

BINARY_FLOAT

json_scalar(to_binary_float(15.5))

Một ví dụ về việc tạo thuộc tính Clob với khóa

[{"ID": 1, "LAST_NAME": "Alex", "FIRST_NAME": "Pip"}, 
{"ID": 2, "LAST_NAME": "John", "FIRST_NAME": "Alan"},
{"ID": 3, "LAST_NAME": "Dehan", "FIRST_NAME": "Luck"},
{"ID": 4, "LAST_NAME": "Nick", "FIRST_NAME": "Adem"},
{"ID": 5, "LAST_NAME": "Aspen", "FIRST_NAME": "Turit"}]
8 trong cột JSON bằng SQL là:

cursor.execute("""
        insert into mytab (myjsoncol) values
        (json_object(key 'mydocument' value json_scalar(to_clob(:b))
                returning json))""",
        ['A short CLOB'])

Khi MyTab được truy vấn trong CX_Oracle, dữ liệu CLOB sẽ được trả về dưới dạng chuỗi Python, như được hiển thị trong bảng sau. Đầu ra có thể giống như:

{mydocument: 'A short CLOB'}

Truy vấn và ra ánh xạ loại ràng buộc

Khi nhận được các giá trị JSON cơ sở dữ liệu của Oracle từ cơ sở dữ liệu, ánh xạ thuộc tính sau xảy ra:

Cơ sở dữ liệu Loại hoặc giá trị thuộc tính JSON

Loại python hoặc giá trị

null

Không có

false

Sai

true

ĐÚNG VẬY

CON SỐ

decimal.Decimal

VARCHAR2

str

Thô

Byte

Clob

str

BÃI

Byte

NGÀY

datetime.datetime

Dấu thời gian

datetime.datetime

Khoảng thời gian năm này sang tháng khác

json_scalar (to_yminterval (‘+5-9,)))

Khoảng thời gian đến thứ hai

datetime.timedelta

BINARY_DOUBLE

float

BINARY_FLOAT

float

json_scalar (to_dsinterval (‘p25dt8h25m,)))

danh sách

Mảng

DIGN

Sự vật

JSON_OBject (Khóa ‘Fred Giá trị JSON_SCALAR (5), khóa‘ George, giá trị JSON_SCALAR (‘A String,) trả về JSON)

Clob

[{"ID": 1, "LAST_NAME": "Alex", "FIRST_NAME": "Pip"}, 
{"ID": 2, "LAST_NAME": "John", "FIRST_NAME": "Alan"},
{"ID": 3, "LAST_NAME": "Dehan", "FIRST_NAME": "Luck"},
{"ID": 4, "LAST_NAME": "Nick", "FIRST_NAME": "Adem"},
{"ID": 5, "LAST_NAME": "Aspen", "FIRST_NAME": "Turit"}]
0

json_scalar (to_clob (‘một clob ngắn))

BÃI

[{"ID": 1, "LAST_NAME": "Alex", "FIRST_NAME": "Pip"}, 
{"ID": 2, "LAST_NAME": "John", "FIRST_NAME": "Alan"},
{"ID": 3, "LAST_NAME": "Dehan", "FIRST_NAME": "Luck"},
{"ID": 4, "LAST_NAME": "Nick", "FIRST_NAME": "Adem"},
{"ID": 5, "LAST_NAME": "Aspen", "FIRST_NAME": "Turit"}]
1

json_scalar (to_blob (UTL_RAW.CAST_TO_RAW (‘A ngắn Blob,))))

[{"ID": 1, "LAST_NAME": "Alex", "FIRST_NAME": "Pip"}, 
{"ID": 2, "LAST_NAME": "John", "FIRST_NAME": "Alan"},
{"ID": 3, "LAST_NAME": "Dehan", "FIRST_NAME": "Luck"},
{"ID": 4, "LAST_NAME": "Nick", "FIRST_NAME": "Adem"},
{"ID": 5, "LAST_NAME": "Aspen", "FIRST_NAME": "Turit"}]
2

NGÀY

Lưu ý rằng hành vi xử lý lỗi mặc định cho các chức năng này là

create table customers (
    id integer not null primary key,
    json_data json
);
8, điều đó có nghĩa là không có giá trị nào được trả về nếu xảy ra lỗi. Để đảm bảo rằng một lỗi được nêu ra, hãy sử dụng
create table customers (
    id integer not null primary key,
    json_data json
);
9.

Để biết thêm thông tin, hãy xem các biểu thức đường dẫn SQL/JSON trong Hướng dẫn Nhà phát triển Oracle JSON.

Truy cập dữ liệu quan hệ dưới dạng JSON¶

Trong cơ sở dữ liệu Oracle 12.2 hoặc sau đó, chức năng JSON_OBject là một cách tuyệt vời để chuyển đổi dữ liệu bảng quan hệ thành JSON:

[{"ID": 1, "LAST_NAME": "Alex", "FIRST_NAME": "Pip"}, 
{"ID": 2, "LAST_NAME": "John", "FIRST_NAME": "Alan"},
{"ID": 3, "LAST_NAME": "Dehan", "FIRST_NAME": "Luck"},
{"ID": 4, "LAST_NAME": "Nick", "FIRST_NAME": "Adem"},
{"ID": 5, "LAST_NAME": "Aspen", "FIRST_NAME": "Turit"}]
3

Điều này tạo ra:

[{"ID": 1, "LAST_NAME": "Alex", "FIRST_NAME": "Pip"}, 
{"ID": 2, "LAST_NAME": "John", "FIRST_NAME": "Alan"},
{"ID": 3, "LAST_NAME": "Dehan", "FIRST_NAME": "Luck"},
{"ID": 4, "LAST_NAME": "Nick", "FIRST_NAME": "Adem"},
{"ID": 5, "LAST_NAME": "Aspen", "FIRST_NAME": "Turit"}]
4

Làm cách nào để chèn tệp JSON vào bảng SQL?

Chúng ta có thể phân tích văn bản JSON và đọc hoặc sửa đổi các giá trị. Chuyển đổi các đối tượng JSON thành định dạng bảng ...
Bước 1: Sử dụng OpenRowset (số lượng lớn) ....
Bước 2: Nhập FILE1.JSON vào SQL Server ..
Bước 3: Chuyển đổi dữ liệu JSON ..

Chúng ta có thể lưu trữ dữ liệu JSON trong Oracle không?

Bạn có thể lưu trữ dữ liệu JSON trong cơ sở dữ liệu Oracle bằng các cột có kiểu dữ liệu là Varchar2, Clob hoặc Blob. .

Làm thế nào để bạn thêm vào một JSON trong Python?

Các bước để thêm vào tệp JSON trong Python, việc nối lại JSON vào một tệp bao gồm các bước sau: Đọc JSON trong Python dict hoặc đối tượng Danh sách.Nối đối tượng JSON vào Dict (hoặc Danh sách) bằng cách sửa đổi nó.Viết đối tượng Dict (hoặc Danh sách) cập nhật vào tệp gốc.Read the JSON in Python dict or list object. Append the JSON to dict (or list ) object by modifying it. Write the updated dict (or list ) object into the original file.

Làm cách nào để thêm JSON vào cơ sở dữ liệu?

Cách đọc dữ liệu JSON và chèn nó vào cơ sở dữ liệu..
Ví dụ Tệp JSON.Tạo một dự án mới.....
Đọc nhiệm vụ JSON.Trên tác vụ đọc JSON, chỉ định các giá trị cho thuộc tính tệp: ....
Đọc các thuộc tính tác vụ JSON.....
Thêm Rowset mới.....
Tên biến phần tử Rowset.....
Thêm cột.....
Thuộc tính phần tử cột.....
Ví dụ Mảng tệp JSON ..