我是一名初学程序员(实际上是自动化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
答案 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
语句。