python - 如何将数组插入数据库?

标签 python database-design numpy

In my previous question很多用户希望我提供更多数据来玩弄。所以我开始导出我的所有数据并用 Python 处理它,但后来我意识到:我应该把所有这些数据放在哪里?

好吧,我决定最好的办法是将它们保存在数据库中,所以至少我没有 to parse the raw files每次。但由于我对数据库一无所知,这变得相当困惑。我尝试了一些教程来创建一个 sqlite 数据库,添加一个表和字段并尝试插入我的 numpy.arrays,但它无法让它工作。

通常情况下,我每只狗的结果如下所示: alt text

所以我有 35 只不同的狗,每只狗都有 24 次测量值。每个测量本身都有未知数量的接触。每个测量由一个 3D 阵列(整个板的 248 帧 [255x63])和一个 2D 阵列(板 [255x63] 的每个传感器的最大值)组成。在数据库中存储一个值不是问题,但将我的 2D 数组放入其中似乎不起作用。

所以我的问题是我应该如何在数据库中排序并将我的数组插入其中?

最佳答案

您可能希望从一个 dogs 表开始,其中包含每只狗的所有平面(非数组)数据,每只狗都有 一个 的数据,比如名字、性别和年龄:

CREATE TABLE `dogs` (
  `id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
  `name` VARCHAR(64),
  `age` INT UNSIGNED,
  `sex` ENUM('Male','Female')
);

从那里开始,每只狗“有很多”测量值,因此您需要一个 dog_mesaurements 表来存储 24 个测量值:

CREATE TABLE `dog_measurements` (
  `id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
  `dog_id` INT UNSIGNED NOT NULL,
  `paw` ENUM ('Front Left','Front Right','Rear Left','Rear Right'),
  `taken_at` DATETIME NOT NULL
);

然后,每当您进行测量时,您 INSERT INTO dog_measurements (dog_id,taken_at) VALUES (*?*, NOW()); 其中 * ? * 是dogs 表中狗的 ID。

然后您需要表格来存储每次测量的实际帧数,例如:

CREATE TABLE `dog_measurement_data` (
  `id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
  `dog_measurement_id` INT UNSIGNED NOT NULL,
  `frame` INT UNSIGNED,
  `sensor_row` INT UNSIGNED,
  `sensor_col` INT UNSIGNED,
  `value` NUMBER
);

这样,对于 250 帧中的每一帧,您循环遍历 63 个传感器中的每一个,并将该传感器的值与帧号一起存储到数据库中:

INSERT INTO `dog_measurement_data` (`dog_measurement_id`,`frame`,`sensor_row`,`sensor_col`,`value`) VALUES
(*measurement_id?*, *frame_number?*, *sensor_row?*, *sensor_col?*, *value?*)

显然用实际值替换 measurement_id?frame_number?sensor_number?value? :-)

所以基本上,每个 dog_measurement_data 都是给定帧的单个传感器值。这样,要获取所有给定帧的所有传感器值,您将:

SELECT `sensor_row`,sensor_col`,`value` FROM `dog_measurement_data`
WHERE `dog_measurement_id`=*some measurement id* AND `frame`=*some frame number*
ORDER BY `sensor_row`,`sensor_col`

这将为您提供该帧的所有行和列。

关于python - 如何将数组插入数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3738269/

相关文章:

python - 将 numpy 数组及其大小写入二进制文件

python - 在python中使用lambda进行无限递归

python - 计算 1d 内单个粒子的均方位移

python - 尝试在 YoutubeAnalytics Api 中使用 Pandas 解析 JSON 并将其转换为 CSV

python - 在 Python 中旋转图像 - 提高质量 - Scipy

mysql - 如何跟踪谁添加/编辑了当前信息

api - 用于从各种第三方 API 获取和转换数据的后端解决方案

php - MySQL - 如何连接两个或多个具有多个 ID 的表?

python - 通过python算法将Square Hald clut转换为Classic Hald clut

python - 将两个一维数组连接成一个二维数组,并在Python中重新洗牌后再次将其打破