如何使用 Python fdb 从 Firebird 数据库正确调用 UDF(外部函数)
How to properly call UDF (external function) from Firebird database using Python fdb
我是一名初学者程序员(实际上是自动化 QA 测试员)从事内部项目(特定于我的工作),我正在尝试使用存储在 Firebird 数据库中的 UDF(外部函数又名用户定义函数) (我希望我的措辞是正确的)。
我正在使用 Python 的 fdb 驱动程序连接到 Firebird 数据库,我可以连接 运行 基本 SQL 语句,但是当我 运行以下语句 UDF returns 0 而不是预期值。
cur.execute("INSERT INTO temp (column1,column2) VALUES(f_udfName(?),?)",(int(line.rstrip('\n')),line.rstrip('\n')))
我正在遍历一个文件,文件的每一行都是一个 11 位数字。我想将原始数字插入 column1
并将 UDF 的 return 值插入 table temp
的 column2
。当我点击这行代码时,它成功完成,但我得到 0
的 return 值而不是 9 位数字。
我用谷歌搜索了我能想到的一切来解决这个问题。如果有人至少能够为我指出正确的方向,我将不胜感激。
我正在使用 Python 3.4,最新的 fdb 版本和 Firebird 2.5。
编辑: 如果我 运行 来自 python 命令行的代码并且不参数化 UDF return 的语句期望值。示例:
cur.execute("INSERT INTO temp (column1,column2) VALUES(f_udfName(12345678901),12345678901)")
按照 的建议,将 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(..)
将导致 return 值为 0
而没有 CAST
语句。
我是一名初学者程序员(实际上是自动化 QA 测试员)从事内部项目(特定于我的工作),我正在尝试使用存储在 Firebird 数据库中的 UDF(外部函数又名用户定义函数) (我希望我的措辞是正确的)。
我正在使用 Python 的 fdb 驱动程序连接到 Firebird 数据库,我可以连接 运行 基本 SQL 语句,但是当我 运行以下语句 UDF returns 0 而不是预期值。
cur.execute("INSERT INTO temp (column1,column2) VALUES(f_udfName(?),?)",(int(line.rstrip('\n')),line.rstrip('\n')))
我正在遍历一个文件,文件的每一行都是一个 11 位数字。我想将原始数字插入 column1
并将 UDF 的 return 值插入 table temp
的 column2
。当我点击这行代码时,它成功完成,但我得到 0
的 return 值而不是 9 位数字。
我用谷歌搜索了我能想到的一切来解决这个问题。如果有人至少能够为我指出正确的方向,我将不胜感激。
我正在使用 Python 3.4,最新的 fdb 版本和 Firebird 2.5。
编辑: 如果我 运行 来自 python 命令行的代码并且不参数化 UDF return 的语句期望值。示例:
cur.execute("INSERT INTO temp (column1,column2) VALUES(f_udfName(12345678901),12345678901)")
按照 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(..)
将导致 return 值为 0
而没有 CAST
语句。