вставить значения в таблицу базы данных без использования интерактивной оболочки python в django

Мое приложение называется search_keywords. Как и при создании этого приложения, у меня будет один файл с именем models.py, в котором я написал этот фрагмент кода:

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 #имя моего проекта и app = поиск #имя моего приложения

при запуске этого кода выдает ошибку:

Traceback (последний последний вызов):

Файл "call.py", строка 7, в

из search.models импорт Ключевые слова

ImportError: нет модуля с именем search.models

и в том числе:

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

это в приведенном выше коде дает ошибку:

Traceback (последний последний вызов):

Файл "call.py", строка 4, в

sys.path.insert(0,path_to_mysite)

NameError: имя «path_to_mysite» не определено

Почему? У меня есть мой проект на рабочем столе, а также указанный выше файл кода Python. Пожалуйста помоги!!

////////////////////////////////////////// теперь выдает эту ошибку, пожалуйста help.see it at: ошибка при доступе к таблице создано в django в коде python


person POOJA GUPTA    schedule 03.07.2012    source источник
comment
эй нет никого, кто может мне помочь в этом. пожалуйста, ребята, мне очень нужно знать срочно. пожалуйста помоги!!!   -  person POOJA GUPTA    schedule 03.07.2012
comment
пожалуйста, помогите мне со второй проблемой, о которой я упоминал полчаса назад.   -  person POOJA GUPTA    schedule 03.07.2012


Ответы (3)


Это не должно быть проблемой, просто импортирующей ваши модели и создающей экземпляры объектов для сохранения в базе данных:

# 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()
person mata    schedule 03.07.2012
comment
скажите, пожалуйста, еще одну вещь, что код, который вы дали, import os.environ['DJANGO_SETTINGS_MODULE'] = 'django_project.settings', я должен написать эти строки в моем коде, упомянутом выше. - person POOJA GUPTA; 03.07.2012
comment
если вы хотите использовать django из сценария pyhton вне приложения django, да, вам нужно сначала настроить его, чтобы django мог найти конфигурацию, а каталог проекта django должен находиться в sys.path. подробнее здесь - person mata; 03.07.2012
comment
не могли бы вы взглянуть на мой код, который я только что отредактировал и упомянул выше. почему выдает такую ​​ошибку? - person POOJA GUPTA; 03.07.2012
comment
Просто замените path_to_mysite на путь к каталогу вашего проекта. Он жалуется, что переменная не установлена. - person mata; 03.07.2012

Для каждого элемента в вашем списке создайте экземпляр Keywords_Search. После этого вызовите .save() на каждом из них. Например:

for name, count in mylist:
    s = Keywords_Search(file_name=name, frequency_count=count)
    s.save()
person Simeon Visser    schedule 03.07.2012
comment
не могли бы вы взглянуть на мой код, который я только что отредактировал и упомянул выше. почему выдает такую ​​ошибку? - person POOJA GUPTA; 03.07.2012

Во-первых, в вашем коде мало проблем (например, вы вызываете встроенные методы, не говоря уже о count.__len__()). Вместо того, чтобы пытаться понять, что вы делаете, вот два рекомендуемых способа сделать это в django:

  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

person Burhan Khalid    schedule 03.07.2012