Python 带缓存环境的sqlalchemy查询中的非ascii字符
当我在python3.6.5、dogpile.cache==0.7.1和Sqlalchemy==1.3.2上使用选项(FromCache())时,遇到了这个错误Python 带缓存环境的sqlalchemy查询中的非ascii字符,python,sqlalchemy,Python,Sqlalchemy,当我在python3.6.5、dogpile.cache==0.7.1和Sqlalchemy==1.3.2上使用选项(FromCache())时,遇到了这个错误 UnicodeEncodeError:“ascii”编解码器无法对744位置的字符“\xae”进行编码:序号不在范围内(128) 我发现这就是“BrandX®”的商标 例如: vendors = ['BrandX®', 'BrandY Inc.'] engine = create_engine(os.getenv('DEV_DATABA
UnicodeEncodeError:“ascii”编解码器无法对744位置的字符“\xae”进行编码:序号不在范围内(128)
我发现这就是“BrandX®”的商标
例如:
vendors = ['BrandX®', 'BrandY Inc.']
engine = create_engine(os.getenv('DEV_DATABASE_URL'), client_encoding='utf-8')
Session = scoped_session(sessionmaker(bind=engine, autoflush=False))
store_id = 123
db = Session()
q = db2.query(Order).join(Product) \
.options(FromCache()) \
.filter(Order.store_id == store_id) \
if vendor:
clauses = []
for v in vendor:
clauses.append((Product.vendor == v))
q = q.filter(or_(*clauses))
return q.all()
我试图将供应商编码更改为“utf-8”和“ascii”,但它不起作用。感谢您的帮助。好的,在尝试了编码之后,我发现错误实际上是由于缓存造成的。具体地说,是.options(FromCache())导致了这个问题 我将错误追溯到一个名为md5_key_mangler的函数,下面是函数
def md5_key_mangler(key):
"""Receive cache keys as long concatenated strings;
distill them into an md5 hash.
"""
return md5(key.encode("ascii")).hexdigest()
来自Sqlalchemy的完整文档。
似乎是这条线
md5(key.encode("ascii")).hexdigest()
这就是问题的根源。
然后,我可以进入包含我从附加链接获得的dogpile_caching.environment的文件,并将key.encode更改为utf-8
md5(key.encode("utf-8")).hexdigest()
这就解决了错误。希望有帮助