17324


Djangoで作ったプロジェクトに外部のmaster.pyからデータベースにデータを入れたい。  
開発環境ではSQLite 3で本番環境ではMySQLを使用

検索エンジンで調べた結果

[code]

    import os
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lovadeck.settings")
    
[/code]

のように記述すればよいとの記述を発見し、試しましたがダメでした。

master.py

[code]

    import os
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lovadeck.settings")
    import django
    django.setup()
    from cms.models import Servant
    
    -------中略---------
    
    Servant.hpf     = servant_divs[1].text #整数の3桁数字が入っています
    Servant.hpf20   = servant_divs[2].text
    Servant.apf     = servant_divs[4].text #整数の2-3桁の数字が入っています
    Servant.apf20   = servant_divs[5].text
    
[/code]

models.py

[code]

    from django.db import models
    
    class Servant(models.Model):
        '''使い魔'''
        hpf    = models.IntegerField('HP')
        hpf20  = models.IntegerField('HP Lv20')
        apf    = models.IntegerField('AP')
        apf20  = models.IntegerField('AP Lv20')
    
[/code]

.  
├── lovadeck  
│ ├── cms  
│ │ ├── admin.py  
│ │ ├── admin.pyc  
│ │ ├── __init__.py  
│ │ ├── __init__.pyc  
│ │ ├── migrations  
│ │ │ ├── 0001_initial.py  
│ │ │ ├── 0001_initial.pyc  
│ │ │ ├── __init__.py  
│ │ │ └── __init__.pyc  
│ │ ├── models.py  
│ │ ├── models.pyc  
│ │ ├── tests.py  
│ │ └── views.py  
│ ├── lovadeck  
│ │ ├── __init__.py  
│ │ ├── __init__.pyc  
│ │ ├── settings.py  
│ │ ├── settings.pyc  
│ │ ├── urls.py  
│ │ ├── urls.pyc  
│ │ ├── wsgi.py  
│ │ └── wsgi.pyc  
│ ├── db.sqlite3  
│ ├── manage.py**  
│ └── **master.py**  
└── Vagrantfile

[code]

    pip freeze -l
    
    beautifulsoup4==4.4.0
    distribution==1.0.0
    Django==1.8.3
    lxml==3.4.4
    
[/code]

ディレクトリ構造やインストールされているものは以上のようになります。  
よろしくお願いします。


CC BY-SA 3.0
2015-10-06T12:18:31.013
17321
2015-11-04T08:42:55.627
2015-11-04T08:42:55.627
4787
12611
question
python django
Djangoのデータベースに外部からデータを入れたい


`os.environ.setdefault`と`django.setup()`は問題ないと思われます。

`Servant`のフィールドに値を代入した後`save()`を行っていないので、データが生成されないのではないでしょうか。

[code]

    s = Servant()
    s.hpf     = servant_divs[1].text
    s.hef20   = servant_divs[2].text
    s.apf     = servant_divs[4].text
    s.apf20   = servant_divs[5].text
    s.save()
    
[/code]

もしくは、`create()`を使っても良いかと。

[code]

    s = Servant.objects.create(
        hpf=servant_divs[1].text, hef20=servant_divs[2].text,
        apf=servant_divs[4].text, apf20=servant_divs[5].text
    )
    
[/code]

もし`servant_divs[n].text`が`str`や`unicode`型なら`int`型に変換してから代入する必要がありますね。


CC BY-SA 3.0
2015-10-06T14:39:14.417
17324
2015-10-06T14:39:14.417
9044
17321
answer