SQLAlchemy:表版本已經存在。pgAdmin4 在 Linux Mint 20 和 20.1 上失敗
我已經找到了解決方案,我只是想分享一下,以防有人遇到同樣的問題。
情況
在 virtualenv 中的 Linux Mint 20 (Ulyana) 和 Linux Mint 20.1 (Ulyssa) 上安裝 pgAdmin4 版本 4.30。pgAdmin4 的大部分是使用 Flask 框架編寫的 Python Web 應用程序。因此,它是在 Python virtualenv 中實現的理想候選者,如下所示:
如何在 Linux Mint 20 上使用 pgAdmin4 安裝 PostgreSQL
和,
在 Linux Mint 20 (ulyana) 上安裝 pgAdmin 4
在西班牙語中,
如何在 Linux Mint 20 上使用 pgAdmin4 安裝 PostgreSQL
錯誤
完成該過程後,第一次嘗試執行 pgAdmin4 時,出現以下錯誤:
Traceback (most recent call last): File "venv/lib/python3.8/site-packages/pgadmin4/pgAdmin4.py", line 87, in <module> exec(open(file_quote(setup_py), 'r').read()) File "<string>", line 449, in <module> File "<string>", line 372, in setup_db [...] File "/home/mint/pgAdmin4/venv/lib/python3.8/site-packages/flask_sqlalchemy/__init__.py", line 575, in get_options self._sa.apply_driver_hacks(self._app, sa_url, options) File "/home/mint/pgAdmin4/venv/lib/python3.8/site-packages/flask_sqlalchemy/__init__.py", line 908, in apply_driver_hacks sa_url.database = os.path.join(app.root_path, sa_url.database) AttributeError: can't set attribute
在第二次嘗試執行 pgAdmin4 時,顯示的錯誤是:
Traceback (most recent call last): File "/home/mint/pgAdmin4/venv/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 1705, in _execute_context self.dialect.do_execute( File "/home/mint/pgAdmin4/venv/lib/python3.8/site-packages/sqlalchemy/engine/default.py", line 681, in do_execute cursor.execute(statement, parameters) sqlite3.OperationalError: table version already exists The above exception was the direct cause of the following exception: Traceback (most recent call last): File "venv/lib/python3.8/site-packages/pgadmin4/pgAdmin4.py", line 94, in <module> app = create_app() [...] File "/home/mint/pgAdmin4/venv/lib/python3.8/site-packages/sqlalchemy/engine/default.py", line 681, in do_execute cursor.execute(statement, parameters) sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) table version already exists [SQL: CREATE TABLE version ( name VARCHAR(32) NOT NULL, value INTEGER NOT NULL, PRIMARY KEY (name) ) ] (Background on this error at: http://sqlalche.me/e/14/e3q8)
這種情況於 2021 年 3 月開始發生,據我所知,Linux Mint 20 和 Linux Mint 20.1 上的情況相同。
注意:放置 virtualenv 的更合適的位置是
/opt
,但是對於多個測試,我選擇了/home
帶有 Linux Mint 20 的 live USB。然後將最終更改應用到我的 Linux Mint 20.1
解決方案
將 SQLAlchemy 降級到較早的非衝突版本。
在發布解釋在 Linux Mint 20 上的 virtualenv 中安裝 pgAdmin4 的步驟的文章時,pip 正在實施 SQLAlchemy 1.3.23。然後,在這最後幾天,使用的版本是 SQLAlchemy 1.4.1
降級可以使用
pip install --upgrade
.--upgrade
可用於兩者,降級或升級。(venv) mint@mint:~/pgAdmin4$ pip install --upgrade SQLAlchemy==1.3.23
此後,當嘗試執行 pdAdmin4 時,將顯示一個新問題:
Traceback (most recent call last): File "venv/lib/python3.8/site-packages/pgadmin4/pgAdmin4.py", line 94, in <module> app = create_app() File "/home/mint/pgAdmin4/venv/lib/python3.8/site-packages/pgadmin4/pgadmin/__init__.py", line 347, in create_app if not os.path.exists(SQLITE_PATH) or get_version() == -1: File "/home/mint/pgAdmin4/venv/lib/python3.8/site-packages/pgadmin4/pgadmin/setup/db_version.py", line 19, in get_version return version.value AttributeError: 'NoneType' object has no attribute 'value'
~/.pgadmin
通過刪除目錄(在安裝期間創建)然後重新執行“python pgAdmin4.py”解決了這個新問題
我知道回答有點晚了,但在某些情況下,有人仍在尋找解決方案。這是解決我的問題。
我只是按照教程
如何在 Linux Mint 20 上使用 pgAdmin4 安裝 PostgreSQL(第一個連結)
和,
在 Linux Mint 20 (ulyana) 上安裝 pgAdmin 4(第二個連結)
首先更新我們所有的 pip 包。下面是如何做到這一點。
然後我所做的就是將安裝連結更改為最新版本,因此其他所需的軟體包也會更新。
或者簡單地說,在第11 步(在第一個連結上)或在第6 步(在第二個連結上)將命令更改為這個:
pip install https://ftp.postgresql.org/pub/pgadmin/pgadmin4/v6.1/pip/pgadmin4-6.1-py3-none-any.whl
之後,執行教程中的下一步。