You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Python列表格式Embedding批量插入PolarDB IMCI的VECTOR列?

解决MySQL VECTOR类型插入OpenAI Embedding的问题

1. 字符串格式转换方案(快速解决)

直接把Python浮点数列表转成[x1, x2, ..., xn]格式的字符串,再通过CAST函数转换为VECTOR类型,就能解决类型不匹配问题:

# 将embedding列表转为字符串格式
vec_str = str(my_list)
cursor.execute(
    "INSERT INTO embeddings_store (id, vec) VALUES (%s, CAST(%s AS VECTOR))",
    (1, vec_str)
)

这种方式无需额外依赖,适合小批量插入或测试场景,但字符串解析会有一定性能开销。

2. 二进制格式方案(批量插入首选)

MySQL的VECTOR类型支持二进制序列化格式,相比字符串解析性能提升明显,适合大规模批量插入。可以借助numpy将浮点数列表转为二进制字节流,再用FROM_BINARY函数解析:

步骤1:安装numpy(如果未安装)

pip install numpy

步骤2:二进制转换与插入代码

import numpy as np

# 将Python列表转为float32类型的numpy数组,再转为字节流
vec_binary = np.array(my_list, dtype=np.float32).tobytes()
cursor.execute(
    "INSERT INTO embeddings_store (id, vec) VALUES (%s, FROM_BINARY(%s, VECTOR(1536)))",
    (1, vec_binary)
)

批量插入优化

如果是批量插入,用executemany配合二进制格式能大幅提升效率:

# 构造批量数据:假设data是[(id1, embedding1), (id2, embedding2), ...]
batch_data = []
for idx, embedding in data:
    vec_binary = np.array(embedding, dtype=np.float32).tobytes()
    batch_data.append((idx, vec_binary))

cursor.executemany(
    "INSERT INTO embeddings_store (id, vec) VALUES (%s, FROM_BINARY(%s, VECTOR(1536)))",
    batch_data
)

注意事项

  • 确保numpy数组的 dtype 是float32,因为MySQL的VECTOR默认使用单精度浮点数存储(如果你的VECTOR定义是双精度,需改用float64)。
  • 批量插入时建议控制批次大小,避免单次提交数据量过大导致性能问题。

内容的提问来源于stack exchange,提问作者大兔崽子

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.11 20:32:35