Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用django模型将数据传输到db.sqlite3_Python_Django_Pandas_Sqlite_Python 3.6 - Fatal编程技术网

Python 使用django模型将数据传输到db.sqlite3

Python 使用django模型将数据传输到db.sqlite3,python,django,pandas,sqlite,python-3.6,Python,Django,Pandas,Sqlite,Python 3.6,我有以下列标题的dfs: Year JAN FEB MAR APR MAY JUN JUL AUG SEP OCT NOV DEC WIN SPR SUM AUT ANN ATTRIBUTE LOCATION 每列包含随机浮点值,属性除外,该属性包含以下列表中的值: [Max_temp, Min_temp, Mean_temp, Sunshine, Rainfall] 和位置,其中包含此列表中的值: [Max_temp, Min_temp, Mean_temp, Sunshine, Rai

我有以下列标题的dfs:

Year JAN FEB MAR APR MAY JUN JUL AUG SEP OCT NOV DEC WIN SPR SUM AUT ANN ATTRIBUTE LOCATION
每列包含随机浮点值,属性除外,该属性包含以下列表中的值:

[Max_temp, Min_temp, Mean_temp, Sunshine, Rainfall]
  • 和位置,其中包含此列表中的值:

    [Max_temp, Min_temp, Mean_temp, Sunshine, Rainfall]
    
    [英国、英格兰、苏格兰、威尔士]

我需要使用以下模型将其放入django附带的sqlite3数据库中:

from django.db import models
from django.core.validators import MaxValueValidator, MinValueValidator


class Location(models.Model):
    LOCATIONS = (
        ('EN', 'England'),
        ('SC', 'Scotland'),
        ('WA', 'Wales'),
        ('UK', 'United Kingdom'),
    )
    location = models.CharField(max_length=2, choices=LOCATIONS)

    class Meta:
        verbose_name_plural = "Location"

    def __str__(self):
        return self.location

class Max_temp(models.Model):
    location = models.ForeignKey(Location, on_delete=models.CASCADE)
    year = models.IntegerField(
    default=0,
    validators=[MaxValueValidator(9999), MinValueValidator(0)]
)
    MONTH_OR_SEASON = (
        ("JAN", "January"),
        ("FEB", "February"),
        ("MAR", "March"),
        ("APR", "April"),
        ("MAY", "May"),
        ("JUN", "June"),
        ("JUL", "July"),
        ("AUG", "August"),
        ("SEP", "September"),
        ("OCT", "October"),
        ("NOV", "November"),
        ("DEC", "December"),
        ("WIN", "Winter"),
        ("SPR", "Spring"),
        ("SUM", "Summer"),
        ("AUT", "Autumn"),
        ("ANN", "Annual"),
)
    month_or_season = models.CharField(max_length=3, choices=MONTH_OR_SEASON)

    class Meta:
        verbose_name_plural = "Maximum Temperature"

    def __str__(self):
        return self.year

class Min_temp(models.Model):
    location = models.ForeignKey(Location, on_delete=models.CASCADE)
    year = models.IntegerField(
    default=0,
    validators=[MaxValueValidator(9999), MinValueValidator(0)]
)
    MONTH_OR_SEASON = (
        ("JAN", "January"),
        ("FEB", "February"),
        ("MAR", "March"),
        ("APR", "April"),
        ("MAY", "May"),
        ("JUN", "June"),
        ("JUL", "July"),
        ("AUG", "August"),
        ("SEP", "September"),
        ("OCT", "October"),
        ("NOV", "November"),
        ("DEC", "December"),
        ("WIN", "Winter"),
        ("SPR", "Spring"),
        ("SUM", "Summer"),
        ("AUT", "Autumn"),
        ("ANN", "Annual"),
)
    month_or_season = models.CharField(max_length=3, choices=MONTH_OR_SEASON)

    class Meta:
        verbose_name_plural = "Minimum Temperature"

    def __str__(self):
        return self.year

class Mean_temp(models.Model):
    location = models.ForeignKey(Location, on_delete=models.CASCADE)
    year = models.IntegerField(
    default=0,
    validators=[MaxValueValidator(9999), MinValueValidator(0)]
)
    MONTH_OR_SEASON = (
        ("JAN", "January"),
        ("FEB", "February"),
        ("MAR", "March"),
        ("APR", "April"),
        ("MAY", "May"),
        ("JUN", "June"),
        ("JUL", "July"),
        ("AUG", "August"),
        ("SEP", "September"),
        ("OCT", "October"),
        ("NOV", "November"),
        ("DEC", "December"),
        ("WIN", "Winter"),
        ("SPR", "Spring"),
        ("SUM", "Summer"),
        ("AUT", "Autumn"),
        ("ANN", "Annual"),
)
    month_or_season = models.CharField(max_length=3, choices=MONTH_OR_SEASON)

    class Meta:
        verbose_name_plural = "Mean Temperature"

    def __str__(self):
        return self.year

class Sunshine(models.Model):
    location = models.ForeignKey(Location, on_delete=models.CASCADE)
    year = models.IntegerField(
    default=0,
    validators=[MaxValueValidator(9999), MinValueValidator(0)]
)
    MONTH_OR_SEASON = (
        ("JAN", "January"),
        ("FEB", "February"),
        ("MAR", "March"),
        ("APR", "April"),
        ("MAY", "May"),
        ("JUN", "June"),
        ("JUL", "July"),
        ("AUG", "August"),
        ("SEP", "September"),
        ("OCT", "October"),
        ("NOV", "November"),
        ("DEC", "December"),
        ("WIN", "Winter"),
        ("SPR", "Spring"),
        ("SUM", "Summer"),
        ("AUT", "Autumn"),
        ("ANN", "Annual"),
)
    month_or_season = models.CharField(max_length=3, choices=MONTH_OR_SEASON)

    class Meta:
        verbose_name_plural = "Sunshine"

    def __str__(self):
        return self.year

class Rainfall(models.Model):
    location = models.ForeignKey(Location, on_delete=models.CASCADE)
    year = models.IntegerField(
    default=0,
    validators=[MaxValueValidator(9999), MinValueValidator(0)]
)
    MONTH_OR_SEASON = (
        ("JAN", "January"),
        ("FEB", "February"),
        ("MAR", "March"),
        ("APR", "April"),
        ("MAY", "May"),
        ("JUN", "June"),
        ("JUL", "July"),
        ("AUG", "August"),
        ("SEP", "September"),
        ("OCT", "October"),
        ("NOV", "November"),
        ("DEC", "December"),
        ("WIN", "Winter"),
        ("SPR", "Spring"),
        ("SUM", "Summer"),
        ("AUT", "Autumn"),
        ("ANN", "Annual"),
)
    month_or_season = models.CharField(max_length=3, choices=MONTH_OR_SEASON)

    class Meta:
        verbose_name_plural = "Rainfall"

    def __str__(self):
        return self.year
我有点困惑于如何做到这一点——我不确定我的模型结构是否正确?有没有一种方法可以构造模型,这样我就不必重复代码了?我需要一个结构如下的数据库:

位置-最高温度
-最低温度
-平均温度
-阳光
-降雨

所以每个位置都有一个最大温度表,一个最小温度表等等

最主要的问题是,我如何告诉Django将熊猫df放入数据库,以及在Django项目中我将代码放在哪里


感谢您的帮助

您对模型结构的质疑是正确的:)通常,当您有那么多代码重复时,有一种更简单的方法。这里的关键是,您的度量都具有相同的模式。您定义的每个模型代表一个数据库表,我们实际上不需要为每个度量类型创建一个新的数据库表——我们可以将该类型作为列存储在“度量”表中

我还质疑您是否需要
位置
的单独表格,因为它只包含国家/地区代码的详细名称-您也可以使用
选项字段
(如果您的用例比这更高级,那么可以将位置模型分开)

现在,当您循环数据帧中的每一行时,您将获得
属性
值(您可以将其转换为
.lower()
,以与
模型.py中定义的
测量类型
选项一致)和
位置
,对于
1-2-3-4-5-6-7-8-9-10-11-12-WIN SPR SUM AUT ANN中的每个值,您可以使用该属性、位置和月/季以及该列中的值创建一个新的
度量值

要创建新的
测量
对象,您只需执行以下操作:

for row in my_data_frame:
    attribute = row['ATTRIBUTE']  # (or whatever)
    location = row['LOCATION']
    ...
    for month_or_season in MONTH_AND_SEASONS:
        value = row[month_or_season]
        ....
        Measurement(
            measurement_type=attribute,
            location=location,
            value=value,
            ...
        ).save()  # Saves model instance to database

您的示例中似乎缺少了相当数量的数据属性。在不知道用例的情况下,推荐模型结构是不可能的。你能展示pandas中的一个示例行吗?你想在你的表中显示什么样的行吗?抱歉,我已经编辑了-我希望这更清楚?这很好,但是你能解释返回“{0}in{1}-{2},{3}”格式吗(self.measurement\u type、self.location、self.month\u或self.seasure、self.year等)语法?我不确定这是在做什么?在df上循环也是有效的?必须有一个内置函数,我可以调用它来加快大型dfs的计算时间?它使用内置字符串格式的python(请参阅)使用models属性构建字符串这可能是一种比循环更有效的方法,但我对pandas的了解还不够-无论哪种方法,您最终都会选择这些属性,这似乎是在数据帧上循环的最快方法