SQLAlchemy不会将值替换为查询

时间:2018-08-21 15:08:00

标签: python sqlalchemy teradata

我有一个sqlalchemy查询,该查询使用一些窗口函数在列上实现lag()。如果重要的话,后端将使用Teradata。

我收到一个数据库错误,这提示我参数值未正确替换。如果我在数据库中运行裸查询,则会得到完全相同的错误。

表被定义为基类的扩展,并以通常的方式从数据库反映出来。

sqlalchemy代码:

name = 'some_column'
query = self.session\
            .query(func.min(getattr(table,name))\
                .over(partition_by=over_attrs,
                      order_by=getattr(table,name),
                      rows=(1,1)))

产生以下sql:

SELECT min(my_table_1.my_date) 
OVER (PARTITION BY my_table_1.ban, my_table_1.location 
ORDER BY my_table_1.my_date ROWS 
BETWEEN ? FOLLOWING AND ? FOLLOWING) AS anon_1 
FROM schema.my_table AS my_table_1

我收到的错误消息是:

(teradata.api.DatabaseError) (3707, "[42000] [Teradata]
[ODBC Teradata Driver][Teradata Database] Syntax error, 
expected something like a name or a Unicode delimited identifier 
or an integer between the 'BETWEEN' keyword and '?'. ") 
[SQL: 'SELECT TOP 25 min(my_table_1.my_date) 
OVER (PARTITION BY my_table_1.ban, my_table_1.location 
ORDER BY my_table_1.my_date ROWS BETWEEN ? FOLLOWING AND ? FOLLOWING) AS anon_1 \n
FROM schema.my_table AS my_table_1'] [parameters: (1, 1)] 
(Background on this error at: http://sqlalche.me/e/4xp6)

如果我在数据库中用{{1,1)替换?来运行查询,则查询运行良好。如果我留在?中,那么它将失败,并显示与sqlalchemy版本完全相同的错误。

我做错了什么会导致它以这种方式失败,或者这可能是sqlalchemy中的错误吗?

版本:

SQLAlchemy          1.2.8 
sqlalchemy-teradata 0.1.0.dev0
pyodbc              4.0.23 

我正在使用Teradata数据库ODBC驱动程序v 16.10。

0 个答案:

没有答案