1

私のアプリ名は search_keywords です。このアプリを作成するときと同様に、models.py というファイルが 1 つあります。

from django.db import models 

class Keywords(models.Model):
    file_name = models.CharField(primary_key=True, max_length=100)
    frequency_count = models.IntegerField()

次に、このアプリを INSTALLED_APPS に追加し、python manage.py syncdb を実行します。このコマンドを実行すると、django で自動的に作成されたテーブルが取得されます。次に、python manage.py sql search_keywords を実行します。必要に応じてテーブルが表示されます。

次に、python manage.py シェルを実行します。これを実行する代わりに、作成した python コードで作成したテーブルに値を挿入します。コードは次のとおりです。

#!/usr/bin/python

#here skey.py is another file created by me and has the imported functions 
#in this code 
from skey import find_root_tags, count, sorting_list 
str1 = raw_input("enter the word to be searched\n")
list = []
fo = open("xml.txt","r")

for i in range(count.__len__()):

    file = fo.readline()
    file = file.rstrip('\n')
    find_root_tags(file,str1,i) 

list.append((file,count[i]))

sorting_list(list)
fo.close()

このリスト要素を django によって作成されたテーブルに挿入し、関数 sorting_list が呼び出された後も挿入したいと考えています。リストにはファイル名とその数が含まれています。例 list=[('books.xml','3'),('news.xml,'2')].

どうやってやるの?

助けてください。

/////////////////////////////////////////////// ////////////////////////////

ちょっと私はコードを書いています:

#!/usr/bin/python

#to tell django which settings module to use 
import os
os.environ['DJANGO_SETTINGS_MODULE'] = 'mysite.settings'

from search.models import Keywords 

from skey import find_root_tags, count, sorting_list

str1 = raw_input("enter the word to be searched\n")
list = []
fo = open("xml.txt","r")

for i in range(count.__len__()):

    file = fo.readline()
    file = file.rstrip('\n')
    find_root_tags(file,str1,i) 

    list.append((file,count[i]))

sorting_list(list)

for name, count in list:
    s = Keywords(file_name=name,frequency_count=count)
    s.save()

fo.close()

ここで django_project = mysite #私のプロジェクトの名前 and app = search #私のアプリの名前

このコードを実行すると、エラーが発生します:

トレースバック (最新の呼び出しが最後):

ファイル「call.py」の 7 行目

from search.models import キーワード

ImportError: search.models という名前のモジュールがありません

および以下を含む:

import sys
sys.path.insert(0, path_to_django_project)

上記のコードでは、エラーが発生します。

トレースバック (最新の呼び出しが最後):

ファイル「call.py」の 4 行目

sys.path.insert(0,path_to_mysite)

NameError: 名前 'path_to_mysite' が定義されていません

なぜですか?デスクトップにプロジェクトがあり、上記の python コード ファイルもあります。助けてください!!

///////////////////////////////////////// 今、このエラーが発生しています。お願いしますhelp.see it: pythonコードでdjangoで作成されたテーブルにアクセスする際のエラー

4

3 に答える 3

1

モデルをインポートし、データベースに永続化するオブジェクトインスタンスを作成するだけのオブジェクトではありません。

# setup sys.path first if needed
import sys
sys.path.insert(0, path_to_django_project)

# tell django which settings module to use
import os
os.environ['DJANGO_SETTINGS_MODULE'] = 'django_project.settings'

# import application models
import test_app.models as m

# create and save db entries...
o = m.TestObject()
o.var = 'spam'
o.par = 1
o.save()
于 2012-07-03T06:25:47.163 に答える
1

リスト内の要素ごとに、のインスタンスを作成しますKeywords_Search。その後、.save()それぞれを呼び出します。例えば:

for name, count in mylist:
    s = Keywords_Search(file_name=name, frequency_count=count)
    s.save()
于 2012-07-03T06:26:07.333 に答える
0

まず、コードにはほとんど問題がありません (たとえば、ビルトイン メソッドを呼び出しているなどcount.__len__())。自分が何をしているのかを理解しようとする代わりに、django でこれを行うための推奨される 2 つの方法を次に示します。

  1. Django は、SQL、XML、YAML、または JSON でモデルの初期データを提供する機能を提供します。これにより、 syncdbを実行するたびに自動データ挿入が可能になります。コマンドを再度実行する必要はありません。

  2. カスタム管理コマンドを作成して実行するmanage.py

キーワードのファイルがあり、入力したキーワードがファイルにいくつ含まれているかを検索したいとします。

これを行うカスタム管理コマンドを作成する方法は次のとおりです。

from collections import Counter
from django.core.management.base import BaseCommand, CommandError
from search.models import Keywords

class Command(BaseCommand):
    args = 'search_string'
    help = 'Enter the search string'


    def handle(self, *args, **options):
        file_contents = []
        with open('keyword_master.txt') as f:
            file_contents = [l for l in f.readlines() if l.rstrip('\n')]

        if not file_contents:
           raise CommandError("Cannot read keyword_master.txt")

        c = Counter(file_contents)

        for search_string in args:
            freq = c[search_string]
            Keywords.object.create(keyword=search_string,frequency_count=freq)
            self.stdout.write('Added %s freq for "%s"' % (freq,search_string))

commands任意のアプリ内で呼び出されるフォルダーを作成します。このフォルダー内に、という空のファイルを作成します__init__.py。同じフォルダに、このファイルを「keyword_importer.py」として保存します。これで、次のことができます。

/search
..__init__.py
../commands
.....__init__.py
.....keyword_importer.py
.....keyword_master.txt

今それを実行しますpython manage.py keyword_importer mykeyword

于 2012-07-03T09:22:56.370 に答える