14

令我惊讶的是,我还没有在其他地方发现这个问题。简短版,我正在编写一个我计划部署到云的应用程序(可能使用 Heroku),它将进行各种网络抓取和数据收集。它将位于云中的原因是,我可以将其设置为每天独立运行,并将数据拉到其数据库中,而无需打开我的计算机,并且团队的其他成员也可以访问数据。

我曾经使用过 AWS 的 SimpleDB 和 DynamoDB,但是我发现 SDB 的存储限制太小而且 DDB 的查询能力差是个问题,所以我正在寻找可以存储任意长度值的数据库系统(SQL 或 NoSQL) (理想情况下是任意数据结构)并且可以在任何字段上查询。

我为 Heroku 找到了许多数据库解决方案,例如 ClearDB,但我看到的所有信息都显示了如何设置 Django 来访问数据库。因为这是一个脚本而不是一个站点,所以如果我不需要的话,我真的不想深入研究 Django。

是否有任何类型的数据库可以在不使用 Django 的情况下使用 Python 在 Heroku 中连接?

4

4 回答 4

21

您可以从 Heroku 获取数据库,而无需您的应用程序使用 Django。为此:

heroku addons:add heroku-postgresql:dev

如果您需要更大更专用的数据库,您可以在Heroku Postgres查看计划

在您的 requirements.txt 中,您需要添加:

psycopg2

然后您可以与它进行连接/交互,类似于以下内容:

import psycopg2
import os
import urlparse

urlparse.uses_netloc.append('postgres')
url = urlparse.urlparse(os.environ['DATABASE_URL'])

conn = psycopg2.connect("dbname=%s user=%s password=%s host=%s " % (url.path[1:], url.username, url.password, url.hostname))
cur = conn.cursor()

query = "SELECT ...."
cur.execute(query)
于 2012-05-17T21:59:50.680 回答
3

我最近用 Flask 做了这个。(https://github.com/HexIce/flask-heroku-sqlalchemy)。

有几个问题:

1. 如果您不使用 Django,您可能必须自己设置数据库,方法是:

heroku addons:add shared-database

(或者无论您想使用哪个数据库,其他数据库都需要花钱。)

2. 数据库 URL 存储在 Heroku 中的“DATABASE_URL”环境变量中。在python中,你可以通过做得到它。

dburl = os.environ['DATABASE_URL']

从那里连接到数据库的操作取决于您,一种选择是 SQLAlchemy。

于 2012-05-17T18:44:43.410 回答
3

我会使用 MongoDB。Heroku 支持它,所以我认为它很容易启动和扩展:https ://addons.heroku.com/mongohq

关于 Python:MongoDB 是一个非常简单的数据库。该模式非常灵活,非常适合 Python 字典。这真是一件好事。

您可以使用PyMongo

from pymongo import Connection
connection = Connection()

# Get your DB
db = connection.my_database

# Get your collection
cars = db.cars

# Create some objects
import datetime
car = {"brand": "Ford",
       "model": "Mustang",
       "date": datetime.datetime.utcnow()}

# Insert it
cars.insert(car)

很简单吧?

希望能帮助到你。

编辑:

正如 Endophage 所提到的,与 Mongo 交互的另一个不错的选择是mongoengine。如果你有很多数据要存储,你应该看看。

于 2012-05-17T18:53:35.530 回答
0

创建一个独立的 Heroku Postgres 数据库。http://postgres.heroku.com

于 2012-05-17T18:37:05.957 回答