gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 03:28:55 24 4
gpt4 key购买 nike

我是一名初级程序员(实际上是自动化 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 位数字。我想将原始数字插入到 column1 中,并将 UDF 的返回值插入到 temp 表的 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(..) 将导致没有 CAST 语句的返回值 0

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com