Django具有用于封装所有的数据库工作纳入Python类图书馆,这样你就不必使用原始SQL烂摊子,直到你有做一些真正聪明。尽管Django是一个Web应用程序框架,但您可以使用use the database ORM by itself。
Josh的模型看起来像这样在Python中使用Django:
from django.db import models
class Dog(models.Model):
# Might want to look at storing birthday instead of age.
# If you track age, you probably need another field telling
# you when in the year age goes up by 1... and at that point,
# you're really storing a birthday.
name = models.CharField(max_length=64)
age = models.IntegerField()
genders = [
('M', 'Male'),
('F', 'Female'),
]
gender = models.CharField(max_length=1, choices=genders)
class Measurement(models.Model):
dog = models.ForeignKey(Dog, related_name="measurements")
paws = [
('FL', 'Front Left'),
('FR', 'Front Right'),
('RL', 'Rear Left'),
('RR', 'Rear Right'),
]
paw = models.CharField(max_length=2, choices=paws)
taken_at = models.DateTimeField(default=date, auto_now_add=True)
class Measurement_Point(models.Model):
measurement = models.ForeignKey(Measurement, related_name="data_points")
frame = models.IntegerField()
sensor_row = models.PositiveIntegerField()
sensor_col = models.PositiveIntegerField()
value = models.FloatField()
class Meta:
ordering = ['frame', 'sensor_row', 'sensor_col']
的id
字段自动创建。
然后,你可以做这样的事情:
dog = Dog()
dog.name = "Pochi"
dog.age = 3
dog.gender = 'M'
# dog.gender will return 'M', and dog.get_gender_display() will return 'Male'
dog.save()
# Or, written another way:
dog = Dog.objects.create(name="Fido", age=3, sex='M')
要进行测量:
measurement = dog.measurements.create(paw='FL')
for frame in range(248):
for row in range(255):
for col in range(63):
measurement.data_points.create(frame=frame, sensor_row=row,
sensor_col=col, value=myData[frame][row][col])
最后,为了得到一个框架:
# For the sake of argument, assuming the dogs have unique names.
# If not, you'll need some more fields in the Dog model to disambiguate.
dog = Dog.objects.get(name="Pochi", sex='M')
# For example, grab the latest measurement...
measurement = dog.measurements.all().order_by('-taken_at')[0]
# `theFrameNumber` has to be set somewhere...
theFrame = measurement.filter(frame=theFrameNumber).values_list('value')
注:这将返回元组列表(例如[(1.5,), (1.8,), ... ]
),因为values_list()
可以一次检索多个字段。我对NumPy并不熟悉,但我可以想象它有一个类似于Matlab的reshape
函数的函数,用于将向量重新映射为矩阵。
为了充分披露,现在正在[SuperUser Chat](http://chat.superuser.com/rooms/11/fake-programmers)中讨论这个问题:-) – Josh 2010-09-17 19:35:16
主要原因是我没有将成为使用它的人,我需要一些保证,我的文件是我把它们放在哪里。另外显然我会插入更多的数据,而不仅仅是这些数组。但是阵列给我头痛,所以如果我能把它们弄进去,其余的会更容易 – 2010-09-17 19:46:29
为什么不使用pickle.dump或numpy.dump呢?然后,您可以完全转储您的多维数组。没有理由设计一个数据库,如果你只是想用它来保存python对象。 – 2010-09-17 19:59:54