Mysql Sqlalchemy类\u MatchType(sqltypes.Float,sqltypes.MatchType):AttributeError
有时执行查询时出现以下错误:Mysql Sqlalchemy类\u MatchType(sqltypes.Float,sqltypes.MatchType):AttributeError,mysql,flask,sqlalchemy,flask-sqlalchemy,Mysql,Flask,Sqlalchemy,Flask Sqlalchemy,有时执行查询时出现以下错误: ct = db.session.query(CIType).filter( CIType.type_name == key).first() or \ db.session.query(CIType).filter(CIType.type_id == key).first() 完整错误信息 2016-08-11 14:27:26,177 ERROR /usr/lib/python2.6/site-pa
ct = db.session.query(CIType).filter(
CIType.type_name == key).first() or \
db.session.query(CIType).filter(CIType.type_id == key).first()
完整错误信息
2016-08-11 14:27:26,177 ERROR /usr/lib/python2.6/site-packages/flask/app.py 1306 - Exception on /api/v0.1/projects/search-indexer-rafael/product [GET]
Traceback (most recent call last):
File "/usr/lib/python2.6/site-packages/flask/app.py", line 1687, in wsgi_app
response = self.full_dispatch_request()
File "/usr/lib/python2.6/site-packages/flask/app.py", line 1360, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/usr/lib/python2.6/site-packages/flask/app.py", line 1358, in full_dispatch_request
rv = self.dispatch_request()
File "/usr/lib/python2.6/site-packages/flask/app.py", line 1344, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "/data/webapps/cmdb-api/core/special.py", line 175, in get_project_product
product = ProjectManager().get_for_product(project_name)
File "/data/webapps/cmdb-api/lib/special/project.py", line 18, in __init__
self.ci_type = CITypeCache.get("project")
File "/data/webapps/cmdb-api/models/cmdb.py", line 458, in get
ct = db.session.query(CIType).filter(
File "/usr/lib64/python2.6/site-packages/sqlalchemy/orm/scoping.py", line 149, in do
def do(self, *args, **kwargs):
File "/usr/lib64/python2.6/site-packages/sqlalchemy/util/_collections.py", line 903, in __call__
item = dict.get(self, key)
File "/usr/lib/python2.6/site-packages/flask_sqlalchemy.py", line 201, in __init__
bind=db.engine,
File "/usr/lib/python2.6/site-packages/flask_sqlalchemy.py", line 754, in engine
return self.get_engine(self.get_app())
File "/usr/lib/python2.6/site-packages/flask_sqlalchemy.py", line 771, in get_engine
return connector.get_engine()
File "/usr/lib/python2.6/site-packages/flask_sqlalchemy.py", line 451, in get_engine
self._engine = rv = sqlalchemy.create_engine(info, **options)
File "/usr/lib64/python2.6/site-packages/sqlalchemy/engine/__init__.py", line 344, in create_engine
of 0 indicates no limit; to disable pooling, set ``poolclass`` to
File "/usr/lib64/python2.6/site-packages/sqlalchemy/engine/strategies.py", line 50, in create
File "/usr/lib64/python2.6/site-packages/sqlalchemy/engine/url.py", line 116, in get_dialect
return self.get_dialect().driver
File "/usr/lib64/python2.6/site-packages/sqlalchemy/util/langhelpers.py", line 170, in load
fn.__func__.__doc__ = doc
File "/usr/lib64/python2.6/site-packages/sqlalchemy/dialects/__init__.py", line 33, in _auto_fn
try:
File "/usr/lib64/python2.6/site-packages/sqlalchemy/dialects/mysql/__init__.py", line 8, in <module>
from . import base, mysqldb, oursql, \
File "/usr/lib64/python2.6/site-packages/sqlalchemy/dialects/mysql/base.py", line 681, in <module>
class _MatchType(sqltypes.Float, sqltypes.MatchType):
AttributeError: 'module' object has no attribute 'MatchType'
然后
sqlalchemy的版本是sqlalchemy-1.0.8-py2.6.egg-info
2016-08-11 14:27:26,177 ERROR /usr/lib/python2.6/site-packages/flask/app.py 1306 - Exception on /api/v0.1/projects/search-indexer-rafael/product [GET]
Traceback (most recent call last):
File "/usr/lib/python2.6/site-packages/flask/app.py", line 1687, in wsgi_app
response = self.full_dispatch_request()
File "/usr/lib/python2.6/site-packages/flask/app.py", line 1360, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/usr/lib/python2.6/site-packages/flask/app.py", line 1358, in full_dispatch_request
rv = self.dispatch_request()
File "/usr/lib/python2.6/site-packages/flask/app.py", line 1344, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "/data/webapps/cmdb-api/core/special.py", line 175, in get_project_product
product = ProjectManager().get_for_product(project_name)
File "/data/webapps/cmdb-api/lib/special/project.py", line 18, in __init__
self.ci_type = CITypeCache.get("project")
File "/data/webapps/cmdb-api/models/cmdb.py", line 458, in get
ct = db.session.query(CIType).filter(
File "/usr/lib64/python2.6/site-packages/sqlalchemy/orm/scoping.py", line 149, in do
def do(self, *args, **kwargs):
File "/usr/lib64/python2.6/site-packages/sqlalchemy/util/_collections.py", line 903, in __call__
item = dict.get(self, key)
File "/usr/lib/python2.6/site-packages/flask_sqlalchemy.py", line 201, in __init__
bind=db.engine,
File "/usr/lib/python2.6/site-packages/flask_sqlalchemy.py", line 754, in engine
return self.get_engine(self.get_app())
File "/usr/lib/python2.6/site-packages/flask_sqlalchemy.py", line 771, in get_engine
return connector.get_engine()
File "/usr/lib/python2.6/site-packages/flask_sqlalchemy.py", line 451, in get_engine
self._engine = rv = sqlalchemy.create_engine(info, **options)
File "/usr/lib64/python2.6/site-packages/sqlalchemy/engine/__init__.py", line 344, in create_engine
of 0 indicates no limit; to disable pooling, set ``poolclass`` to
File "/usr/lib64/python2.6/site-packages/sqlalchemy/engine/strategies.py", line 50, in create
File "/usr/lib64/python2.6/site-packages/sqlalchemy/engine/url.py", line 116, in get_dialect
return self.get_dialect().driver
File "/usr/lib64/python2.6/site-packages/sqlalchemy/util/langhelpers.py", line 170, in load
fn.__func__.__doc__ = doc
File "/usr/lib64/python2.6/site-packages/sqlalchemy/dialects/__init__.py", line 33, in _auto_fn
try:
File "/usr/lib64/python2.6/site-packages/sqlalchemy/dialects/mysql/__init__.py", line 8, in <module>
from . import base, mysqldb, oursql, \
File "/usr/lib64/python2.6/site-packages/sqlalchemy/dialects/mysql/base.py", line 681, in <module>
class _MatchType(sqltypes.Float, sqltypes.MatchType):
AttributeError: 'module' object has no attribute 'MatchType'
在经历了许多相同的错误之后,我再也不能抓住这个错误了。此错误的原因是什么?我假设CIType.type\u name和CIType.type\u id具有不同的数据类型(可能是字符串和数字类型)。可能导致以下情况:
db.session.query(CIType).filter(CIType.type_name == key).first()
是有效的表达式,但:
db.session.query(CIType).filter(CIType.type_id == key).first()
由于类型不匹配而产生错误。您需要在此表达式中将key转换为type\u id列类型
当第一个表达式不返回任何结果时,将计算第二个表达式。如所述:
表达式x或y
首先计算x;如果x为true,则返回其值;否则,计算y并返回结果值
例如:
>>> a = 1 or 2 + '2'
>>> print a
1
>>> a = 0 or 2 + '2'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for +: 'int' and 'str'
>a=1或2+2'
>>>打印
1.
>>>a=0或2+“2”
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
TypeError:不支持+:“int”和“str”的操作数类型
我假设CIType.type\u name和CIType.type\u id具有不同的数据类型(可能是字符串和数字类型)。可能导致以下情况:
db.session.query(CIType).filter(CIType.type_name == key).first()
是有效的表达式,但:
db.session.query(CIType).filter(CIType.type_id == key).first()
由于类型不匹配而产生错误。您需要在此表达式中将key转换为type\u id列类型
当第一个表达式不返回任何结果时,将计算第二个表达式。如所述:
表达式x或y
首先计算x;如果x为true,则返回其值;否则,计算y并返回结果值
例如:
>>> a = 1 or 2 + '2'
>>> print a
1
>>> a = 0 or 2 + '2'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for +: 'int' and 'str'
>a=1或2+2'
>>>打印
1.
>>>a=0或2+“2”
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
TypeError:不支持+:“int”和“str”的操作数类型
谢谢您的回答!很抱歉,我之前没有提供所有信息,现在我提供了代码和所有调用堆栈。所以可能不是您描述的情况。@SkyWay您是否也可以发布CIType定义?正如您假设的:实际上type\u name
是字符串,type\u id
是整数。但是函数调用为CITypeCache.get(“项目”)
,在这种情况下,它将执行语句db.session.query(CIType).filter(CIType.type\u name==key).first()
。此外,表达式中没有浮点类型。@SkyWay或
关键字的工作方式不同:有时db.session.query(CIType).filter(CIType.type\u id==key)。first()
也会被计算,并可能导致此错误。我在回答中补充了更多的解释。有点不同:这是MySQL中浮动的比较结果类型。谢谢,我知道你所说的情况是可能的。但是现在我测试了db.session.query(CIType).filter(CIType.type\u name==key).first()
和db.session.query(CIType.type\u id==key).filter(CIType.type\u id==key).first()
在key为字符串和整数的同时,并且没有发生任何错误。谢谢您的回答!很抱歉,我之前没有提供所有信息,现在我提供了代码和所有调用堆栈。所以可能不是您描述的情况。@SkyWay您是否也可以发布CIType定义?正如您假设的:实际上type\u name
是字符串,type\u id
是整数。但是函数调用为CITypeCache.get(“项目”)
,在这种情况下,它将执行语句db.session.query(CIType).filter(CIType.type\u name==key).first()
。此外,表达式中没有浮点类型。@SkyWay或
关键字的工作方式不同:有时db.session.query(CIType).filter(CIType.type\u id==key)。first()
也会被计算,并可能导致此错误。我在回答中补充了更多的解释。有点不同:这是MySQL中浮动的比较结果类型。谢谢,我知道你所说的情况是可能的。但是现在我测试了db.session.query(CIType).filter(CIType.type\u name==key).first()
和db.session.query(CIType.type\u id==key).filter(CIType.type\u id==key).first()
在key为字符串和整数的同时,并且没有发生任何错误。