sqlalchemy ORM调用失败,类型错误:应为字节,找到str



我用我写的一段代码进行了以下(相对(简单的调用:

pickups = session.query(Pickup).filter(Pickup.firebase_run_id == run_id).all()

我对这段代码进行了两组集成测试,一组在本地运行,使用psycops2和TLS,另一组在GCP开发环境(GCP云函数(中运行,并使用pg8000和UNIX套接字(GCP强制(?(云函数通过UNIX套接字连接到cloud SQL,请参阅此处(。本地集成测试运行良好。然而,开发测试确实失败了,并出现以下错误:

Traceback (most recent call last):
File "/user_code/main.py", line 245, in GET_run
response = run_get(run_id)
File "/user_code/rubbish_geo_client/ops.py", line 686, in run_get
pickups = session.query(Pickup).filter(Pickup.firebase_run_id == run_id).all()
File "/env/local/lib/python3.7/site-packages/sqlalchemy/orm/query.py", line 3319, in all
return list(self)
File "/env/local/lib/python3.7/site-packages/sqlalchemy/orm/query.py", line 3481, in __iter__
return self._execute_and_instances(context)
File "/env/local/lib/python3.7/site-packages/sqlalchemy/orm/query.py", line 3503, in _execute_and_instances
querycontext, self._connection_from_session, close_with_result=True
TypeError: expected bytes, str found

这个特定的函数调用实际上只是这种失败的一个例子;我所有的数据库调用都失败了,出现了相同的_execute_and_instances错误!

也许有人已经了解了解决这个问题的方法是什么?

pg8000在其实现中有一个长期存在的错误,sqlalchemy驱动程序刚刚修复了这个错误。新的pg8000维护人员最近为这个问题推出了一个补丁,并发布了包含该修复程序的pg8000的新版本。不幸的是,这产生了破坏sqlalchemy解决方法的副作用。

sqlalchemy更改其驱动程序以尊重此补丁之前,目前最好的解决方案是将pg8000从1.16.6降级到1.16.5或更低。

您可以使用pip install pg8000<=1.16.5执行此操作。

参考以下对话:GH#commitcomment-43174891,GH#53。

pg8000在SQLAlchemy 1.4+中受支持。

围绕的替代工作

pool.dialect.description_encoding = None

来源:https://github.com/sqlalchemy/sqlalchemy/issues/5645#issuecomment-707879323https://github.com/GoogleCloudPlatform/python-docs-samples/blob/main/cloud-sql/postgres/sqlalchemy/main.py

相关内容

  • 没有找到相关文章

最新更新