不使用 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)的主要内容,如果未能解决你的问题,请参考以下文章
django查询优化——啥时候用sql,啥时候用python