Tôi muốn sử dụng phần mở rộng json1 cho SQLite trong Python. Theo số official documentation, nó phải là tiện ích có thể tải. Tôi đã nhận được tập tin json1.c từ source và biên dịch nó thành json1.so theo official instructions mà không có bất kỳ lỗi nào.Python - phần mở rộng tải JSON1 SQLite
$ gcc -g -fPIC -shared json1.c -o json1.so
Sự cố xảy ra khi tôi cố tải tiện ích mở rộng bằng Python 2.7.12 (và 3.5.2) theo sqlite3 documentation.
>>> import sqlite3
>>> con = sqlite3.connect(":memory:")
>>> con.enable_load_extension(True)
>>> con.load_extension("./json1.so")
Tôi đã nhận được thông báo lỗi truy xuất sau. Tôi chạy trình thông dịch Python từ thư mục với tệp json1.so trong đó. Mặc dù có vẻ như có nhiều thông tin hơn do dấu hai chấm cuối cùng, sau đây là thông báo lỗi hoàn chỉnh.
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
sqlite3.OperationalError: error during initialization:
Thực sự không thể sử dụng json1 làm tiện ích có thể tải trong Python? Là lựa chọn duy nhất của tôi để biên dịch lại SQLite, pysqlite2, vv như được giải thích trong this bài đăng blog của Charles Leifer?
EDIT:
Hóa ra, tôi đã gặp lỗi vì máy của tôi đã có tiện ích này và các tiện ích mở rộng khác đã được bật. Hành động bật tiện ích mở rộng đã được kích hoạt đã kích hoạt lỗi. Cho đến nay, tất cả các máy tính Linux mà tôi có quyền truy cập đã có các phần mở rộng json1 và fts5 được kích hoạt trong SQLite đi kèm với Python. Bạn có thể kiểm tra các tùy chọn biên dịch nào đã được sử dụng bằng cách kết nối với cơ sở dữ liệu SQLite và chạy truy vấn sau đây.
PRAGMA compile_options;
Tải xuống nguồn đã hoạt động nhưng đã trả về lỗi khi tôi cố biên dịch. –
Nó giống như sau: '/usr/lib/gcc/x86_64-pc-linux-gnu/6.2.1/../../../../lib/crt1.o: Trong hàm '_start' : (.text + 0x20): tham chiếu không xác định đối với 'main' collect2: lỗi: ls trả về 1 trạng thái thoát'. Tuy nhiên, tôi thấy một người khác có vấn đề của tôi nhưng họ giải quyết nó bằng cách tìm ra rằng nó đã được nạp và kích hoạt. Nếu phát hiện ra thông qua 'pragma compile_options' và chỉ cần thử nó, json1 đã được nạp và kích hoạt cho tôi! Xin lỗi vì nhận xét đôi. –