Как найти server_version в psycopg 3?
У меня есть этот тест в Django [1]:
from django.db import connection
def test_postgresql_version(self):
postgresql_version = connection.cursor().connection.server_version
if (postgresql_version >= 140000):
pass
else:
raise NotImplementedError("postgresql version must be at least 14.0.")
Этот тест не прошел с psycopg3:
AttributeError: 'Connection' object has no attribute 'server_version'
Как мне проверить server_version в psycopg 3?
В Psycopg 3 (используется с Django 4+ при установке psycopg
вместо psycopg2
) атрибут server_version
больше не доступен непосредственно на connection.cursor().connection
. Вместо этого вам следует использовать объект info
для подключения.
Измените свой тест для использования connection.info.server_version
:
from django.db import connection
def test_postgresql_version(self):
postgresql_version = connection.connection.info.server_version
if postgresql_version >= 140000:
pass
else:
raise NotImplementedError("PostgreSQL version must be at least 14.0.")
используйте функцию, написанную в оболочке базы данных django, чтобы получить версию базы данных
from django.db import connection
database_version = connection.get_database_version()
это позволит абстрагироваться от использования подчеркивания psycopg3 или psycopg2, эта функция была введена в django 4.1.x и поддерживается более поздними версиями
В итоге мы использовали следующий тест:
from django.db import connection
def test_postgresql_version(self):
postgresql_version = connection.cursor().connection.info.server_version
if (postgresql_version >= 140000):
pass
else:
raise NotImplementedError("postgresql version must be at least 14.0.")
Здесь использовано connection.info.server_version
из ответа Анкура.