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

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

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

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

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

我正在遍历一个文件,文件的每一行都是一个 11 位数字。我想将原始数字插入到表 tempcolumn1 中,并将 UDF 的返回值插入到 column2 中。当我输入这行代码时,它成功完成,但我得到的返回值是 0 而不是 9 位数字。

我已经用谷歌搜索了我能想到的所有东西来解决这个问题。如果有人至少能够指出我正确的方向,我将不胜感激。

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

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

cur.execute("INSERT INTO temp (column1,column2) VALUES(f_udfName(12345678901),12345678901)")

最佳答案

根据 Mark Rotteveel 推荐,将 SQL 语句更改为 CAST 参数作为 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 语句。

关于python - 如何使用Python fdb从Firebird数据库正确调用UDF(外部函数),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31926782/

相关文章:

python - 如何使打印不可见(网页创建)?

python - 如何计算 Pandas 中每一列的每日平均值?

python - 如何将多个稀疏矩阵和密集矩阵组合在一起

SQL递归记录: How can I collapse to 'one level only' ?

python - 如何将 Flask/WTForms SelectField 添加到我的 HTML 中?

python - django.core.servers.basehttp.FileWrapper 在 Django 1.9 中消失

python - 使用全局变量从一个Python文件到另一个Python文件

python - 函数调用之外的星号

delphi - 修剪字符字段

firebird - 如何设置初始发电机值?