Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.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
Mysql Sqlalchemy类\u MatchType(sqltypes.Float,sqltypes.MatchType):AttributeError_Mysql_Flask_Sqlalchemy_Flask Sqlalchemy - Fatal编程技术网

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为字符串和整数的同时,并且没有发生任何错误。