1

除了编写数据的脚本之外,我无法从 python 脚本访问 peewee 数据库(但在交互式 shell 中很奇怪)。我正在用 python、flask 和 peewee 开发一个数据挖掘应用程序。我将在这里将其分解为一个字节大小的问题,但它的范围比我所呈现的要大。所有 python 文件都位于同一个文件夹中

基本过程是一个python命令行操作,它会从纽约时报和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 webapp.py”

我试图将其分解为核心问题。烧瓶应用程序永远不会在数据库中看到任何东西......永远......

我知道它正确地记录了它们,因为我实际上可以在那个文件夹中运行“python”,导入数据库,我从 Stories.select() 中得到了很多故事

更奇怪的是,我最初以一种更理想的方式构建了它,其中烧瓶应用程序仅创建一个新实例的新实例,然后调用其上的函数以从数据库返回内容,这很有效。在开发模式下。但是,当我将它部署到我的网络派系服务器(并在那里运行所有东西)时,我再次收到来自数据库的空响应。这是我尝试直接引用烧瓶中的数据库的尝试,认为这可能是新闻几乎他妈的事情......但不。

我只是感到困惑,为什么 sqllite 数据库会在本地完全按预期执行,但一旦部署到网络服务器就不会,而且......为什么我提供的烧瓶代码没有从数据库中获取任何内容,而是运行相同的数据库查询交互式外壳工作?

有任何想法吗?

4

1 回答 1

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
于 2015-02-13T20:56:38.073 回答