Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 带缓存环境的sqlalchemy查询中的非ascii字符_Python_Sqlalchemy - Fatal编程技术网

Python 带缓存环境的sqlalchemy查询中的非ascii字符

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

当我在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_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()
这就解决了错误。希望有帮助