将带有二进制 UUID 的 CSV 导入 MySQL Workbench
Importing CSV with Binary UUID into MySQL Workbench
我正在尝试将 Python 中生成的具有 1000 万行 UUID 的 CSV 文件导入 MySQL Workbench.
首先,我创建了一个 MySQL table 和 binary(16)
列,标题为 ID
:
CREATE TABLE TT (
ID BINARY(16) PRIMARY KEY);
接下来,我使用 uuid
库和 UUID 的二进制版本在 Python 中创建了一个 1000 万行的 CSV 文件:
import pandas as pd
import uuid
ID = []
for i in range(10000000):
ID.append(uuid.uuid4().bytes)
Dict = {'ID':ID}
DF = pd.DataFrame(Dict)
DF.to_csv("Desktop/uuid_table.csv")
设置后,我尝试使用 Table 数据导入向导将 CSV 文件导入 MySQL Workbench,但原始 table 没有任何变化。该过程已完成且没有错误,但显示“已导入 0 行”。
有人可以帮助我如何将此 CSV 文件导入 MySQL Workbench 吗?我究竟做错了什么?谢谢。
一个问题是您的 CSV 包含二进制数据的 python bytes
表示,但它不是 SQL 二进制且长度不是 16。您可以改写十六进制表示.由于这是单列 CSV 并且十六进制字母表中没有需要转义的字符,因此您不需要像 pandas 这样的任何中间体来修复数据。
import uuid
with open("Desktop/uuid_table.csv", "w", newline="") as fileobj:
fileobj.write("ID\r\n")
for i in range(10000000):
fileobj.write(uuid.uuid4().hex + "\r\n")
现在您有一个没有索引的单列 CSV。我不使用 MySQL Workbench 但你想要它相当于
LOAD DATA INFILE 'Desktop/uuid_table.csv' INTO TABLE `TT` (@var1)
SET ID = UNHEX(@var1)
我假设导入向导会让您选择一种格式。
我正在尝试将 Python 中生成的具有 1000 万行 UUID 的 CSV 文件导入 MySQL Workbench.
首先,我创建了一个 MySQL table 和 binary(16)
列,标题为 ID
:
CREATE TABLE TT (
ID BINARY(16) PRIMARY KEY);
接下来,我使用 uuid
库和 UUID 的二进制版本在 Python 中创建了一个 1000 万行的 CSV 文件:
import pandas as pd
import uuid
ID = []
for i in range(10000000):
ID.append(uuid.uuid4().bytes)
Dict = {'ID':ID}
DF = pd.DataFrame(Dict)
DF.to_csv("Desktop/uuid_table.csv")
设置后,我尝试使用 Table 数据导入向导将 CSV 文件导入 MySQL Workbench,但原始 table 没有任何变化。该过程已完成且没有错误,但显示“已导入 0 行”。
有人可以帮助我如何将此 CSV 文件导入 MySQL Workbench 吗?我究竟做错了什么?谢谢。
一个问题是您的 CSV 包含二进制数据的 python bytes
表示,但它不是 SQL 二进制且长度不是 16。您可以改写十六进制表示.由于这是单列 CSV 并且十六进制字母表中没有需要转义的字符,因此您不需要像 pandas 这样的任何中间体来修复数据。
import uuid
with open("Desktop/uuid_table.csv", "w", newline="") as fileobj:
fileobj.write("ID\r\n")
for i in range(10000000):
fileobj.write(uuid.uuid4().hex + "\r\n")
现在您有一个没有索引的单列 CSV。我不使用 MySQL Workbench 但你想要它相当于
LOAD DATA INFILE 'Desktop/uuid_table.csv' INTO TABLE `TT` (@var1)
SET ID = UNHEX(@var1)
我假设导入向导会让您选择一种格式。