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

In my previous question很多用户希望我给玩具更多的数据.所以我有工作出口我的所有数据和处理它与Python,但后来我意识到:我在哪里留下所有这些数据?

那么我决定把最好的东西放在一个数据库中,所以至少我每次都没有to parse the raw files.但是,由于我对数据库一无所知,这是令人困惑的.我尝试了一些教程来创建一个sqlite数据库,添加一个表和字段并尝试插入我的numpy.arrays,但它不能使它工作.

通常我的每只狗的结果如下所示:

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

所以我的问题是我应该如何在数据库中订购,并将数组插入到它中?

最佳答案
你可能想要开始一个狗桌子,里面包含每条狗的所有平面(非阵列)数据,每只狗都有一个,像一个名字,一个性别和一个年龄的东西:

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());其中*? *是狗桌上的狗的身份证.

然后,您将需要表格来存储每个测量的实际帧,如下所示:

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 – 如何将数组插入数据库? - 代码日志