使用 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
的情况下,与您的代码的主要区别是:
- 使用
write(...)
代替 write = ...
- 使用
seek(0)
将流定位在开头,否则您什么也读不到,因为流定位在最后一次写入之后。
我还没有尝试过二进制 IO,但我希望它能以类似的方式工作。
我有一个要存储在我的 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
的情况下,与您的代码的主要区别是:
- 使用
write(...)
代替write = ...
- 使用
seek(0)
将流定位在开头,否则您什么也读不到,因为流定位在最后一次写入之后。
我还没有尝试过二进制 IO,但我希望它能以类似的方式工作。