Python 带日期提升的SQLAlchemy文字:查询参数的输入无效(应为str,Get-date)
当使用SQLAlchemy的Python 带日期提升的SQLAlchemy文字:查询参数的输入无效(应为str,Get-date),python,sqlalchemy,asyncpg,Python,Sqlalchemy,Asyncpg,当使用SQLAlchemy的literal和date对象时,会引发异常 演示 # Versions used: # databases 0.4.1 # asyncpg 0.21.0 # SQLAlchemy 1.3.20 import asyncio from datetime import date from databases import Database from sqlalchemy import select, literal database = Database('postg
literal
和date
对象时,会引发异常
演示
# Versions used:
# databases 0.4.1
# asyncpg 0.21.0
# SQLAlchemy 1.3.20
import asyncio
from datetime import date
from databases import Database
from sqlalchemy import select, literal
database = Database('postgresql://user:password@localhost/dbname')
async def run():
await database.connect()
today = date.today()
query = select([
literal(today).label('today') # <-- The problem is here
])
await database.fetch_all(query)
await database.disconnect()
loop = asyncio.get_event_loop()
loop.run_until_complete(run())
使用的版本:
#数据库0.4.1
#asyncpg 0.21.0
#SQLAlchemy 1.3.20
导入异步
起始日期时间导入日期
从数据库导入数据库
从sqlalchemy导入选择文字
数据库=数据库('postgresql://user:password@localhost/dbname')
异步def run():
等待数据库连接()
今天=日期。今天()
查询=选择([
label('today')#由于数据库驱动程序正在处理数据库文本和python对象之间的类型转换,因此对于asyncpg框架来说,这当然是一个问题 您的错误是由以下中的
\u encode\u bind\u msg
函数引发的:
asyncpg文档表明,由于输入无效,此错误被认为是编码问题
我相信可以找到postgres的asyncpg编解码器,并且在pgproto.date\u encode
功能期间可能会出现问题
您应该尝试根据手动设置编码/解码,以进一步验证此问题的根源
Traceback (most recent call last):
File "test.py", line 21, in <module>
loop.run_until_complete(run())
File "C:\Python38\lib\asyncio\base_events.py", line 616, in run_until_complete
return future.result()
File "test.py", line 14, in run
rows = await database.fetch_all(query)
File "C:\Python38\lib\site-packages\databases\core.py", line 140, in fetch_all
return await connection.fetch_all(query, values)
File "C:\Python38\lib\site-packages\databases\core.py", line 239, in fetch_all
return await self._connection.fetch_all(built_query)
File "C:\Python38\lib\site-packages\databases\backends\postgres.py", line 160, in fetch_all
rows = await self._connection.fetch(query, *args)
File "C:\Python38\lib\site-packages\asyncpg\connection.py", line 443, in fetch
return await self._execute(query, args, 0, timeout)
File "C:\Python38\lib\site-packages\asyncpg\connection.py", line 1445, in _execute
result, _ = await self.__execute(
File "C:\Python38\lib\site-packages\asyncpg\connection.py", line 1454, in __execute
return await self._do_execute(query, executor, timeout)
File "C:\Python38\lib\site-packages\asyncpg\connection.py", line 1476, in _do_execute
result = await executor(stmt, None)
File "asyncpg\protocol\protocol.pyx", line 178, in bind_execute
File "asyncpg\protocol\prepared_stmt.pyx", line 160, in asyncpg.protocol.protocol.PreparedStatementState._encode_bind_msg
asyncpg.exceptions.DataError: invalid input for query argument $1: datetime.date(2020, 11, 30) (expected str, got date)
raise exceptions.DataError(
'invalid input for query argument'
' ${n}: {v} ({msg})'.format(
n=idx + 1, v=value_repr, msg=e)) from e