2016-01-14 2 views
-1

Получил этот файл load_data.py для импорта данных csv в таблицу моделей django ... но он не работает, в терминале, поскольку я выполняю команду «python3 ./load_data.py», это просто идет к той же линии, как если бы load.py даже не называли так:Python CSV import не работает в django

(cost_control_local) [email protected]:~/cost_control_repository/cost_control/csv_data$ python3 ./load_data.py 
(cost_control_local) [email protected]:~/cost_control_repository/cost_control/csv_data$ 

это код load_data.py:

import csv,sys,os 
import django 

pathproject = "/home/juanda/cost_control_repository/cost_control" 
base_csv_filepath = "/home/juanda/cost_control_repository/cost_control/csv_data" 
sys.path.append(pathproject) 
os.environ['DJANGO_SETTINGS_MODULE'] = 'config.settings.local' 
django.setup() 

from cost_control_app.models import Suppliers 

def load_suppliers(): 
    print ("Entering...") 
    csv_file = base_csv_filepath + "supplier_data.csv" 
    dataReader = csv.reader(open(csv_file, encoding='utf-8'),delimiter=',',quotechar='"') 
    #dataReader = csv.reader(open(csv_file), delimiter=',', quotechar='"') 
    for row in dataReader: 
     if row[0] != 'ID': 
      Suppliers.objects.create(
       supplier=row[0], 
       supplier_description=row[1] 
      ) 
    print ("Imported correctly") 

Любые идеи? Спасибо за вашу помощь !!

ответ

1

Вам необходимо в нижней части вашего кода записи:

if __name__ == "__main__": 
    load_suppliers() 

Проверить это stackoverflow question, чтобы узнать больше об этом.

Также цитирует python doc:

'main' is the name of the scope in which top-level code executes. A module’s name is set equal to 'main' when read from standard input, a script, or from an interactive prompt.

A module can discover whether or not it is running in the main scope by checking its own name, which allows a common idiom for conditionally executing code in a module when it is run as a script or with python -m but not when it is imported:

+0

Выдает мне эту ошибку: ValueError: недопустимый буквальную для Int() с базой 10: '\ ufeffID' – jsanchezs

+1

Тогда что и является ошибка в вашем скрипте. Вам нужно показать полную трассировку для людей, чтобы диагностировать вашу ошибку, мы не могли определить, что не так, просто «ValueError». Кроме того, это больше не связано с этим вопросом, потому что ваша программа начинает работать, поэтому я предлагаю вам закрыть этот вопрос и задать другой вопрос, чтобы люди могли извлечь из этого пользу. –

1
csv_file = base_csv_filepath + "/supplier_data.csv" 

Добавлена ​​/