Мое веб-приложение имеет шаблон, который позволяет пользователю загружать файл. Содержимое файла хранится в переменной.Вызов инициализации функции базы данных из представлений
Я хочу, чтобы файл передавался в представления (views.py), который, в свою очередь, вызывал бы функцию внутри скрипта initializedb.py. Я хочу только , чтобы функция выполнялась, а не весь скрипт initializedb.py (который включает в себя многочисленные вставки). Моя инициализируемая функция БД принимает файл .csv в качестве входных данных и вставляет его содержимое в базу данных.
Мой вопрос: Как мне вызвать функцию, которая находится внутри initializedb.py через мои представления?
в моем шаблоне: -
$.post(
"{{request.route_url('passer_view')}}", // view that should invoke the insert function
{'data': filecontents} //file contents will be my global variable that holds the contents of the file
);
мой views.py:-
@view_config(route_name='passer_view' renderer="mytem.pt")
def insert(request):
data = request.POST["data"]
csvify_data(data) #this function makes renames the data into a csv file
###i should invoke the initializedb.py function here
return HTTPFound(location=...)
мой initializedb.py:-
def main(argv=sys.argv):
#a whole load of engine creation and stuffs
with transaction.manager:
def insertfunction(csvfile):
DBSession.add(...)
Как это может быть сделано есть ли другой способ делать то, что я делаю? Любая идея ценится. Спасибо заранее.
Я как-то понял. Теперь я должен просто поместить эти функции за пределы моего initializedb в другой .py-файл, а затем импортировать функцию в мои представления? – Tania
Вы можете сделать это, или вы можете просто разместить их на верхнем уровне внутри initializedb, если они находятся вне основной функции. –
Хорошо, я тебя. Но в таком случае я должен создать экземпляр другого менеджера транзакций? как с transaction.manager: выше основной функции? – Tania