如何使用Python fdb从Firebird数据库正确调用UDF(外部函数)

时间:2015-08-10 18:38:49

标签: python python-3.x firebird firebird2.5

我是一名初学程序员(实际上是自动化QA测试人员)从事内部项目(特定于我的工作),我正在尝试使用存储在Firebird数据库中的UDF(外部函数,即用户定义函数)(I希望我说的都是正确的。)

我使用Python的fdb驱动程序连接到Firebird数据库,我可以连接,运行基本的SQL语句,但是当我运行以下语句时,UDF返回0而不是预期的值。

cur.execute("INSERT INTO temp (column1,column2) VALUES(f_udfName(?),?)",(int(line.rstrip('\n')),line.rstrip('\n')))

我遍历文件,文件的每一行都是一个11位数字。我想将原始数字插入column1并将UDF的返回值插入表column2的{​​{1}}。当我点击这行代码时,它成功完成,但我得到的返回值为temp而不是9位数字。

我已经用谷歌搜索了我能想到的一切来解决这个问题。如果有人能够指出我至少正确的方向,我会非常感激。

我使用的是Python 3.4,最新的fdb版本和Firebird 2.5。

编辑:如果我从python命令行运行代码并且不对语句进行参数化,则UDF返回预期值。示例:

0

1 个答案:

答案 0 :(得分:2)

根据Mark Rotteveel的建议,将CAST的SQL语句更改为BIGINT解决了问题。

cur.execute("INSERT INTO temp (column1,column2) VALUES(f_udfName(CAST(? AS BIGINT)),?)",(int(line.rstrip('\n')),line.rstrip('\n'))

尝试在Python 3.4中使用long(..)函数不起作用,因为从Python 3.0.1开始,long(..)函数被合并到int(..)函数中。尝试使用int(..)将导致0的返回值没有CAST语句。