flask peewee не работает на веб-сервере

я не могу получить доступ к базе данных peewee из скрипта Python, кроме того, который записывает данные (но странно в интерактивной оболочке). Я разрабатываю приложение для интеллектуального анализа данных с помощью python, flask и peewee. Я собираюсь сократить это до проблемы размера байта здесь, но это больше по объему, чем то, что я представляю. все файлы python находятся в одной папке

базовый процесс представляет собой операцию командной строки Python, которая получает некоторую информацию из New York Times и instagram и сохраняет ее в базе данных Peewee (sqllite). Затем я использую фляжное приложение для изучения данных.

вот одна из моделей из database.py:

from peewee import *

class Story(Model):
    title = CharField()
    story = TextField()
    date = DateField()
    class Meta:
        database = SqliteDatabase("newsalmost.db",threadlocals = True)

новости выглядят примерно так:

from database import *

class NewsAlmost(object):
    def __init__(self):
        self.db = SqliteDatabase("newsalmost.db",threadlocals = True)

если делает что-то вроде этого:

story = Story.create(title = self.feed.stories[key]["title"], story = self.feed.stories[key],date = datetime.datetime.now(), is_relative = True)

затем я могу запустить:

"python newslamost.py -g" 

и он будет собирать вещи и записывать их в базу данных

затем у меня есть файл с именем webapp.py, который является фляжным приложением.

import newsalmost
from flask import Flask
from flask import send_file
import subprocess
app = Flask(__name__)
import os
import json
from database import *

@app.route("/")
def index():
    r = []
    for i in Image.select():
        r.append(str(i))

    return json.dumps(r)

"веб-приложение python.py"

Я попытался свести это к основной проблеме. Приложение фляги никогда ничего не видит в базе данных... никогда...

я ЗНАЮ, что он правильно их регистрирует, потому что я действительно могу запустить «python» в этой папке, импортировать базу данных и получить много историй из Stories.select()

WEIRDER дело в том, что я изначально спроектировал это более желательным образом, когда приложение фляги просто создает новый экземпляр самого близкого к новости экземпляра, а затем вызывает функции для этого, чтобы вернуть материал из базы данных, и это сработало. В РЕЖИМЕ РАЗРАБОТКИ. Но когда я развернул его на своем сервере веб-фракции (и все там заработало), меня снова всегда встречает пустой ответ из базы данных. это моя попытка попытаться напрямую сослаться на базу данных в flask, думая, что, возможно, это была новость, которая почти все испортила ... но нет.

Я просто сбит с толку, почему база данных sqllite будет работать точно так, как ожидалось, локально, но не после развертывания на веб-сервере, а также... почему предоставленный мной фляжный код ничего не получает из базы данных, но выполняет тот же запрос к базе данных в интерактивная оболочка работает?

Любые идеи?


person mradfo21    schedule 12.02.2014    source источник
comment
вздох... я полагаю, это безнадежно... вернемся к MongoDB   -  person mradfo21    schedule 13.02.2014


Ответы (1)


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

database.py:

from peewee import *

db = SqliteDatabase("newsalmost.db",threadlocals = True)

class Story(Model):
    title = CharField()
    story = TextField()
    date = DateField()
    class Meta:
        database = db

newsalmost.py:

from database import *

class NewsAlmost(object):
    def __init__(self):
    self.db = db
person bfontaine    schedule 13.02.2015
comment
в итоге я решил эту проблему ... я просто использовал тестовый режим фляг в производстве. что прямо сказано никогда не делать, но у меня не было проблем с этим... так что... эй... также вот что я делал: vimeo.com/113218591 - person mradfo21; 15.02.2015
comment
Интересная идея, только что проверил :) - person bfontaine; 15.02.2015