Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么要将这些整数转换为随机字符?_Python_Sqlite - Fatal编程技术网

Python 为什么要将这些整数转换为随机字符?

Python 为什么要将这些整数转换为随机字符?,python,sqlite,Python,Sqlite,当我在给定的csv文件(csv\u文件)上运行以下python脚本时,整数在sqlite3数据库中转换为随机字符。我希望这些整数在输入数据库时保持为整数 data=pd.read\u csv(csv\u文件,头=0) csv_fieldnames=data.columns.values 插入“+表格+”(id、纸张、名称)值(“+”、“。连接(“?”*len(csv_字段名))+”) 示例: 示例csv文件: id,paper,name ,7,AC-600 代码生成以下内容: id文件名 -

当我在给定的csv文件(
csv\u文件
)上运行以下python脚本时,整数在sqlite3数据库中转换为随机字符。我希望这些整数在输入数据库时保持为整数

data=pd.read\u csv(csv\u文件,头=0)
csv_fieldnames=data.columns.values
插入“+表格+”(id、纸张、名称)值(“+”、“。连接(“?”*len(csv_字段名))+”)
示例:

示例csv文件:

id,paper,name
,7,AC-600
代码生成以下内容:

id文件名
----------  ----------  ----------
1 AC-600
它应该在什么时候产生这种结果:

id文件名
----------  ----------  ----------
17 AC-600

这里的问题是熊猫对于SQLite3来说太聪明(或愚蠢)。希望包含int值的
paper
列接收
numpy.int64
值和int值。SQLite3将它们作为普通字节处理,因为它是未知类型。因此,7被翻译(在一个小的尾端系统上)为
b'\x07\x00\x00\x00\x00\x00\x00'
,这是一个后面的空格,后跟不包含可打印字符的空字符。这就是为什么其他值会给出明显的随机字符

您可以在插入时手动强制类型,也可以在sqlite3模块中注册适配器:

def adapt_int64(i):
    return int(i)

sqlite3.register_adapter(np.int64, adapt_int64)

在此之后,您可以安全地将
numpy.int64
值插入到
integer
列中。

这里的问题是Pandas对于SQLite3来说太聪明(或太愚蠢)。希望包含int值的
paper
列接收
numpy.int64
值和int值。SQLite3将它们作为普通字节处理,因为它是未知类型。因此,7被翻译(在一个小的尾端系统上)为
b'\x07\x00\x00\x00\x00\x00\x00'
,这是一个后面的空格,后跟不包含可打印字符的空字符。这就是为什么其他值会给出明显的随机字符

您可以在插入时手动强制类型,也可以在sqlite3模块中注册适配器:

def adapt_int64(i):
    return int(i)

sqlite3.register_adapter(np.int64, adapt_int64)
之后,您可以安全地将
numpy.int64
值插入到
integer
列中