使用 Python 将值列表添加到 firebird 中的 blob 字段

Add list of values to a blob field in firebird using Python

我有一个要存储在我的 firebird 数据库中的项目列表。 到目前为止,我制作了以下代码

    Sens=278.3
    DSens=1.2
    Fc10=3.8
    Bw10=60.0
    Fc20=4.2
    Bw20=90.0

    ResultArray = (Sens,DSens,Fc10,Bw10,Fc20,Bw20,t6,t20,Nel,Nsub)
    con = fdb.connect(dsn="192.168.0.2:/database/us-database/usdb.gdb",  user="sysdba", password="#########")
    cur = con.cursor()
    InsertStatement="insert into Tosh_Probe (TestResults ) Values (?)"
    cur.execute(InsertStatement, (ResultArray,))                           
    con.commit()

这里的 TestResult 字段是我数据库中的 blob 字段。

这给出了 TypeError (???) 将这些值存储到 blob 中的正确语法是什么

我尝试的另一个选择是将项目列表写入 StringIO,并将其存储在数据库中。现在在数据库中创建了一个新条目,但没有数据添加到 blob 字段 这是将字段添加到 StringIO

的代码
    ResultArray = StringIO.StringIO()
    ResultArray.write = Sens
    ResultArray.write = DSens   
    #ResultArray.close #tried with and without this line but with the same result

我已经用 Python 3.5.1 和 FDB 1.6 测试过了。以下写法全部起作用(成blob sub_type text):

import fdb
import io

con = fdb.connect(dsn='localhost:testdatabase', user='sysdba', password='masterkey')

cur = con.cursor()
statement = "insert into blob_test2 (text_blob) values (?)"
cur.execute(statement, ("test blob as string",))
cur.execute(statement, (io.StringIO("test blob as StringIO"),))
streamwrites = io.StringIO()
streamwrites.write("streamed write1,")
streamwrites.write("streamed write2,")
streamwrites.seek(0)
cur.execute(statement, (streamwrites,))

con.commit()

con.close()

在写入 StringIO 的情况下,与您的代码的主要区别是:

  1. 使用 write(...) 代替 write = ...
  2. 使用 seek(0) 将流定位在开头,否则您什么也读不到,因为流定位在最后一次写入之后。

我还没有尝试过二进制 IO,但我希望它能以类似的方式工作。