不使用 Django 的 Python 数据库(用于 Heroku)

Posted

技术标签:

【中文标题】不使用 Django 的 Python 数据库(用于 Heroku)【英文标题】:Python database WITHOUT using Django (for Heroku) 【发布时间】:2012-05-25 07:32:01 【问题描述】:

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

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

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

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

【问题讨论】:

【参考方案1】:

您可以从 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)

【讨论】:

非常感谢!我一直试图让一个准系统的 postgres 烧瓶应用程序运行一段时间,而现在所有人都想写的是 sqlalchemy。 每当我尝试运行它时,我都会在 DATABASE_URL 的行中得到一个 <type 'exceptions.KeyError'>。有什么建议吗? 如果您使用 Flask,Flask-SQLAlchemy 将启动一个连接池并为您提供一个不错的 db.Model 类来定义声明性模型。 SQLAlchemy 为您提供了许多与数据库交互的方法。【参考方案2】:

我会使用 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。如果你有很多数据要存储,你应该看看。

【讨论】:

+1 用于 mongo,但我也建议使用 mongoengine,它在 pymongo 和 GridFS 之上提供 ORM 层。 @Endophage 是真的。因为他想要简单,所以我推荐了 Pymongo。但是,我应该提到这一点。谢谢! mongoengine 比 pymongo 有什么好处?如果有的话,看起来 mongoengine 需要编写模式,而 pymongo 不需要。 是的,你是对的。但出于同样的原因,它使处理复杂模式变得更加简单。 我发现对于我正在构建的当前项目,文档结构是理想的,但架构为我省去了一些麻烦,并且总体上有所帮助。【参考方案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。

【讨论】:

没有代表,不能编辑但是:-Heroku Database Page & SQLAlchemy in Flask 代替shared-database,使用heroku-postgresql:dev,它也是免费的,可以让你从heroku外部连接,是postgres 9.1等:postgres.heroku.com/blog/past/2012/4/26/…【参考方案4】:

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

【讨论】:

好的,但问题仍然存在——我如何将它与 python 连接起来? psycopg2?

以上是关于不使用 Django 的 Python 数据库(用于 Heroku)的主要内容,如果未能解决你的问题,请参考以下文章

python面试题

python的django工程可以用tomcat发布吗

django查询优化——啥时候用sql,啥时候用python

请问python怎么和ajax交互数据?

Python——用 Django 写 restful api 接口

用Python+Django在Eclipse环境下开发web网站转