14

驚いたことに、この質問が他の場所で行われているのを見つけられませんでした。短いバージョンでは、クラウドにデプロイする予定のアプリ(おそらくHerokuを使用)を作成しています。このアプリは、さまざまなWebスクレイピングとデータ収集を実行します。クラウドに移行する理由は、毎日自分で実行し、コンピューターの電源を入れなくてもデータをデータベースにプルできるように設定できるようにするためです。また、チームの他のメンバーがアクセスできるようにするためです。データ。

以前はAWSのSimpleDBとDynamoDBを使用していましたが、SDBのストレージ制限が小さく、DDBのクエリ機能が不十分であることが問題であることがわかったため、任意の長さの値を格納できるデータベースシステム(SQLまたはNoSQL)を探しています(そして理想的には任意のデータ構造)そしてそれはどんなフィールドでも照会することができます。

ClearDBなど、Heroku用のデータベースソリューションをたくさん見つけましたが、これまでに見たすべての情報は、データベースにアクセスするようにDjangoを設定する方法を示しています。これはサイトではなくスクリプトを意図しているので、必要がなければDjangoに飛び込むのは本当に好きではありません。

Djangoを使用せずにPythonを使用してHerokuに接続できるデータベースはありますか?

4

4 に答える 4

21

アプリでDjangoを使用しなくても、Herokuから提供されるデータベースを取得できます。そうするために:

heroku addons:add heroku-postgresql:dev

より大規模で専用のデータベースが必要な場合は、HerokuPostgresで計画を調べることができます

あなたの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']

そこからデータベースに接続するために行うことはあなた次第です。1つのオプションは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とインターフェースするためのもう1つの良いオプションはmongoengineです。保存するデータがたくさんある場合は、それを確認する必要があります。

于 2012-05-17T18:53:35.530 に答える
0

スタンドアロンのHerokuPostgresデータベースを作成します。http://postgres.heroku.com

于 2012-05-17T18:37:05.957 に答える