Python 为什么要将这些整数转换为随机字符?
当我在给定的csv文件(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\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
列中