gpt4 book ai didi

python - Qt/QSql查询 : Binary data is interpreted as string when binding to BLOB field

转载 作者:可可西里 更新时间:2023-11-01 07:04:42 25 4
gpt4 key购买 nike

我正在从文件中读取二进制数据并尝试将其存储在 MySql 数据库的 LONGBLOB 字段中。
为此,我使用 Python 和 PySide。

我的问题是,二进制数据被解释为字符串,这意味着当数据中出现换行符时数据被截断。

这似乎是 Python 或 PySide 的问题,因为如果我在 MySql 提示中手动添加数据,它会完美地工作。
编辑:我刚刚使用 C++ 在普通 Qt 上进行了尝试,但我遇到了同样的问题。

我的表定义如下:
CREATE TABLE blobtest(id INT PRIMARY KEY AUTO_INCREMENT,数据 LONGBLOB NOT NULL;

下面是复制器。

from PySide.QtSql import QSqlDatabase, QSqlQuery, QSql

def testit():
db = QSqlDatabase.addDatabase("QMYSQL")
db.setHostName("localhost")
db.setDatabaseName("testdb")
db.setUserName("user")
db.setPassword("pass")
db.open()

query = QSqlQuery(db)
data = "start\n\0\n\0\n\0end"
query.prepare("INSERT INTO blobtest (data) VALUES(:data)")
query.bindValue(":data", data, QSql.In | QSql.Binary)
query.exec_()

db.close()

###############################################################################

if __name__ == "__main__":
testit()

编辑:这里是同一个复制器的 c++ 变体。我正在使用 QByteArray 来保存数据,但它仍然被截断

#include <QtSql/QtSql>
#include <QtCore/QByteArray>

int main(int argc, char* argv[]) {
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
db.setHostName("localhost");
db.setDatabaseName("testdb");
db.setUserName("user");
db.setPassword("pass");
db.open();

QSqlQuery query = QSqlQuery(db);
QByteArray data = QByteArray("start\n\0\n\0\n\0\nend");
query.prepare("INSERT INTO blobtest (data) VALUES(:data)");
query.bindValue(":data", data, QSql::In | QSql::Binary);
query.exec();

db.close();
return 0;
}

有谁知道我可能做错了什么吗?

最佳答案

当在数据中发现 NULL 字符 ('\0') 时,数据才真正被截断。在 C++ 中,您必须以这种方式创建 QByteArray:

QByteArray data = QByteArray("start\n\0\n\0\n\0\nend", 15);

我不懂 python,但我认为您也必须创建一个 QByteArray

关于python - Qt/QSql查询 : Binary data is interpreted as string when binding to BLOB field,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8657086/

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