1
SQLAchemy 및 Python을 사용하여 SQL 쿼리를 동적으로 실행하고 있습니다. 그러나 그것은 오류를주고있다. val2만큼 정수이며 메트릭은 문자열입니다, 여기SQLAlchemy : 정수 매개 변수를 전달하는 동안 쿼리에서 오류가 발생했습니다.
data = engine.execute(m_query, week=Cohort_week, metric=metric, p1=val1, p2=val2).fetchall()
Cohort_week, VAL1 :
이
쿼리를 실행하는 나의 명령입니다.select cus.week,pdp_views, id, :metric,
case
when :metric <= :p2 then 3
when :metric > :p2 and :metric < :p1 then 2
when :metric >= :p1 then 1
end as HML
from
dev.master_abtest_customers cus
where cus.week= :week
오류는 다음과 같습니다 : 나는 (int)로 타입 캐스팅 VAL1, val2만큼 및 주를 시도
DataError Traceback (most recent call last)
<ipython-input-25-30f7e92cbea3> in <module>()
12 m_query = text(m_query)
13
---> 14 data = engine.execute(m_query, week=week, metric=metric, p1=val1, p2=val2).fetchall()
15
16 data = pd.DataFrame(data)
C:\Users\MI0185\AppData\Local\Enthought\Canopy\User\lib\site-packages\sqlalchemy-1.1.0b1-py2.7-win-amd64.egg\sqlalchemy\engine\base.pyc in execute(self, statement, *multiparams, **params)
2050
2051 connection = self.contextual_connect(close_with_result=True)
-> 2052 return connection.execute(statement, *multiparams, **params)
2053
2054 def scalar(self, statement, *multiparams, **params):
C:\Users\MI0185\AppData\Local\Enthought\Canopy\User\lib\site-packages\sqlalchemy-1.1.0b1-py2.7-win-amd64.egg\sqlalchemy\engine\base.pyc in execute(self, object, *multiparams, **params)
945 type(object))
946 else:
--> 947 return meth(self, multiparams, params)
948
949 def _execute_function(self, func, multiparams, params):
C:\Users\MI0185\AppData\Local\Enthought\Canopy\User\lib\site-packages\sqlalchemy-1.1.0b1-py2.7-win-amd64.egg\sqlalchemy\sql\elements.pyc in _execute_on_connection(self, connection, multiparams, params)
260
261 def _execute_on_connection(self, connection, multiparams, params):
--> 262 return connection._execute_clauseelement(self, multiparams, params)
263
264 def unique_params(self, *optionaldict, **kwargs):
C:\Users\MI0185\AppData\Local\Enthought\Canopy\User\lib\site-packages\sqlalchemy-1.1.0b1-py2.7-win-amd64.egg\sqlalchemy\engine\base.pyc in _execute_clauseelement(self, elem, multiparams, params)
1053 compiled_sql,
1054 distilled_params,
-> 1055 compiled_sql, distilled_params
1056 )
1057 if self._has_events or self.engine._has_events:
C:\Users\MI0185\AppData\Local\Enthought\Canopy\User\lib\site-packages\sqlalchemy-1.1.0b1-py2.7-win-amd64.egg\sqlalchemy\engine\base.pyc in _execute_context(self, dialect, constructor, statement, parameters, *args)
1189 parameters,
1190 cursor,
-> 1191 context)
1192
1193 if self._has_events or self.engine._has_events:
C:\Users\MI0185\AppData\Local\Enthought\Canopy\User\lib\site-packages\sqlalchemy-1.1.0b1-py2.7-win-amd64.egg\sqlalchemy\engine\base.pyc in _handle_dbapi_exception(self, e, statement, parameters, cursor, context)
1384 util.raise_from_cause(
1385 sqlalchemy_exception,
-> 1386 exc_info
1387 )
1388 else:
C:\Users\MI0185\AppData\Local\Enthought\Canopy\User\lib\site-packages\sqlalchemy-1.1.0b1-py2.7-win-amd64.egg\sqlalchemy\util\compat.pyc in raise_from_cause(exception, exc_info)
200 exc_type, exc_value, exc_tb = exc_info
201 cause = exc_value if exc_value is not exception else None
--> 202 reraise(type(exception), exception, tb=exc_tb, cause=cause)
203
204 if py3k:
C:\Users\MI0185\AppData\Local\Enthought\Canopy\User\lib\site-packages\sqlalchemy-1.1.0b1-py2.7-win-amd64.egg\sqlalchemy\engine\base.pyc in _execute_context(self, dialect, constructor, statement, parameters, *args)
1182 statement,
1183 parameters,
-> 1184 context)
1185 except Exception as e:
1186 self._handle_dbapi_exception(
C:\Users\MI0185\AppData\Local\Enthought\Canopy\User\lib\site-packages\sqlalchemy-1.1.0b1-py2.7-win-amd64.egg\sqlalchemy\engine\default.pyc in do_execute(self, cursor, statement, parameters, context)
460
461 def do_execute(self, cursor, statement, parameters, context=None):
--> 462 cursor.execute(statement, parameters)
463
464 def do_execute_no_params(self, cursor, statement, context=None):
DataError: (psycopg2.DataError) invalid input syntax for integer: "pdp_views"
[SQL: 'select cus.week, id, %(metric)s,\n case\n when %(metric)s <= %(p2)s then 3\n when %(metric)s > %(p2)s and %(metric)s < %(p1)s then 2 \n when %(metric)s >= %(p1)s then 1\n end as HML\n from \n dev.master_abtest_customers cus\n where cus.week= %(week)s\n\t\t\n\t\t'] [parameters: {'p2': 20L, 'week': 22L, 'metric': u'pdp_views', 'p1': 40L}]
(즉, 사용 INT (VAL1) 등)
은 여기 내 SQL 쿼리입니다. 하지만 여전히 같은 오류.
당신은 당신이 p1
및 p2
하지만 당신이 실제로하고있는 것은 p1
와 p2
와 문자열 'pdp_views'
을 비교한다과 열 pdp_views
의 값을 비교하려는처럼 보이는이
데이터베이스가 정수로 측정 exepects처럼 보이는합니다. 해당 부분에 대한 데이터베이스 구성표를 제공 할 수 있습니까? – syntonym
데이터베이스 스키마 : week는 정수이고, pdp_views는 정수이고, id는 정수입니다. –