亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么在 Python3 的 SQLAlchemy 中使用 BINARY 會導致 TypeError

為什么在 Python3 的 SQLAlchemy 中使用 BINARY 會導致 TypeError

翻閱古今 2022-10-06 19:06:09
我讀了很多類似的問題,但沒有一個清楚地回答我的問題。我在EncryptedTypemysql 表列上使用 sqlalchemy-utils。表創建和插入都可以,但是當我嘗試進行查詢時,接收:Traceback (most recent call last):  File "workspace/bin/test.py", line 127, in <module>    result = session.query(Tester).all()  File "workspace\ERP\venv\lib\site-packages\sqlalchemy\orm\query.py", line 3244, in all    return list(self)  File "workspace\venv\lib\site-packages\sqlalchemy\orm\loading.py", line 101, in instances    cursor.close()  File "workspace\venv\lib\site-packages\sqlalchemy\util\langhelpers.py", line 69, in __exit__    exc_value, with_traceback=exc_tb,  File "workspace\venv\lib\site-packages\sqlalchemy\util\compat.py", line 178, in raise_    raise exception  File "workspace\venv\lib\site-packages\sqlalchemy\orm\loading.py", line 81, in instances    rows = [proc(row) for row in fetch]  File "workspace\venv\lib\site-packages\sqlalchemy\orm\loading.py", line 81, in <listcomp>    rows = [proc(row) for row in fetch]  File "workspace\venv\lib\site-packages\sqlalchemy\orm\loading.py", line 642, in _instance    populators,  File "workspace\venv\lib\site-packages\sqlalchemy\orm\loading.py", line 779, in _populate_partial    dict_[key] = getter(row)  File "workspace\venv\lib\site-packages\sqlalchemy\engine\result.py", line 107, in __getitem__    return processor(self._row[index])  File "workspace\venv\lib\site-packages\sqlalchemy\sql\sqltypes.py", line 944, in process    value = bytes(value)TypeError: string argument without an encoding我發現這個錯誤只在使用 python 3 時發生,而不是使用 python 2。而且問題出在 sqlalchemy類型上,因為我在、和列中bynary得到相同的錯誤。 由于在 python3 中需要對字符串進行編碼,我將第944 行的代碼更改為并且 al 運行良好,所以我的問題是:BinaryVarbinaryBlobbytessqlalchemy\sql\sqltypes.pyvalue = bytes(value, 'utf-8)為什么我需要更改 sqlalchemy 代碼?sqlalchemy 完全可以與 python3 一起使用嗎?更改包的代碼是否安全?
查看完整描述

3 回答

?
森林海

TA貢獻2011條經驗 獲得超2個贊

MySQL 連接器似乎確實有任何問題。只需切換mysql-connector-pythonmysqlclient. 我有同樣的問題,它幫助了我。



查看完整回答
反對 回復 2022-10-06
?
江戶川亂折騰

TA貢獻1851條經驗 獲得超5個贊

而不是mysql+mysqlconnector://<user>:<password>@<host>[:<port>]/<dbname>你會有mysql+mysqldb://<user>:<password>@<host>[:<port>]/<dbname>

SQLAchemy文檔建議在 MySQL-Connector 上使用 mysqlclient(MySQL-Python 的分支)? 。

MySQL Connector/Python DBAPI 自發布以來存在許多問題,其中一些可能仍未解決,并且 mysqlconnector 方言未作為 SQLAlchemy 持續集成的一部分進行測試。推薦的 MySQL 方言是 mysqlclient 和 PyMySQL。


查看完整回答
反對 回復 2022-10-06
?
胡子哥哥

TA貢獻1825條經驗 獲得超6個贊

也許不是最好的解決方案,但現在正在工作。

我認為根本原因是我的 DB-API在查詢期間自動轉換bytes為。str所以我只是通過向以下添加參數來禁用此行為create_engine

engine = create_engine("mysql+mysqlconnector://%(user)s:%(password)s@%(host)s/%(database)s" % DB_CONFIG, connect_args={'use_unicode': False})

結果是,如果您有一String列,它將在查詢中返回,而bytes不是“str”,您必須手動對其進行解碼。

當然有更好的解決方案。


查看完整回答
反對 回復 2022-10-06
  • 3 回答
  • 0 關注
  • 180 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號