Python sqlite3 kütüphanesi, URI'leri kullanamaz, ancak sqlite3 sürümü yapabilmelidir


1

Makineme en son sqlite3 yüklendi:

$ sqlite3 --version
3.26.0 2018-12-01 12:34:55 bf8c1b2b7a5960c282e543b9c293686dccff272512d08865f4600fb58238b4f9

Ayrıca, python'da sqlite3 modülü sqlite3'ün bu sürümünü kullanıyor:

$ python
Python 3.4.9 (default, Jan  5 2019, 18:35:56)
[GCC 5.5.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import sqlite3 as sq
>>> sq.sqlite_version_info
(3, 26, 0)
>>> sq.version_info
(2, 6, 0)

Ancak, bu özellik 3.7 sürümünden beri sqlite içinde olmasına rağmen, URI'leri kullanarak bir veritabanı dosyasını açamıyorum:

>>> import sqlite3 as sq
>>> c = sq.connect('file://test', uri=True)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
sqlite3.NotSupportedError: URIs not supported

Burada neler oluyor? Neyi yanlış yaptım?


Sadece /testişe yarıyor mu? Ve URI desteği için bir bağlantınız var mı?
l0b0

Hata mesajı, sqlite kütüphanesinden değil, doğrudan Python modülünden üretilir. Hangi işletim sistemi açık ve Python'u nasıl yüklediniz? URI desteğinin, Python 3.4
dhke'de

Bluehost'un VPS sistemi üzerinde çalışıyorum, işte tam sürüm dizgem: (/ proc / sürümünden): Linux sürüm 2.6.32-754.6.3.el6.x86_64 (mockbuild@x86-01.bsys.centos.org) (gcc sürüm 4.4.7 20120313 (Red Hat 4.4.7-23) (GCC)) # 1 SMP Sal 9 Ekim 17:27:49 UTC 2018 Python'un bu sürümünü, sırasıyla kullanılarak yüklenen pyenv kullanarak yükledim linuxbrew paket yöneticisi. Sistemin yum paket yöneticisini kullanmıyorum çünkü SQLite'nin "en son" sürümü 2009'dan beri. Bana hiç mantıklı gelmeyen Python kütüphanesinin şikayetçi olması ve henüz yeni SQLite sürümünü görmesi.
EdSanville

Yanıtlar:


1

Tamam, kaynak kodu okuyarak neler olduğunu anladım. Pyenv Python versiyonumu derlediğinde, _sqlite modülü "sqlite3.h" dosyasının gülünç derecede eski CentOS versiyonuna karşı derlendi. Bu nedenle, Python modülünde tanımlı SQLITE_OPEN_URI makrosu yoktu, bu da kodlanmış bir "URI'lar desteklenmiyor" Python istisnası vermesine neden oldu.

Bunu aşmak için, aşağıdaki ortam değişkenini ayarladım:

# This is to direct pyenv to the linuxbrew include and library directories, when building versions of Python
export PYTHON_CONFIGURE_OPTS="LD_RUN_PATH=/home/linuxbrew/.linuxbrew/lib/ LDFLAGS=-L/home/linuxbrew/.linuxbrew/lib/ CPPFLAGS=-I/home/linuxbrew/.linuxbrew/include/"
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.