2012-05-17 26 views
13

Tôi rất ngạc nhiên khi tôi không tìm thấy câu hỏi này ở nơi khác. Phiên bản ngắn, tôi đang viết một ứng dụng mà tôi dự định triển khai lên đám mây (có thể sử dụng Heroku), sẽ thực hiện nhiều thao tác thu thập dữ liệu và thu thập dữ liệu web khác nhau. Lý do nó sẽ có trong đám mây để tôi có thể tự thiết lập để chạy mỗi ngày và kéo dữ liệu vào cơ sở dữ liệu của nó mà không cần máy tính của tôi, cũng như phần còn lại của nhóm có thể truy cập dữ liệu.Cơ sở dữ liệu Python KHÔNG sử dụng Django (cho Heroku)

tôi sử dụng để sử dụng SimpleDB và DynamoDB AWS, nhưng tôi thấy giới hạn lưu trữ SDB để có khả năng truy vấn nghèo DDB cho bạn trở thành một vấn đề nhỏ, và vì vậy tôi đang tìm một hệ thống cơ sở dữ liệu (SQL hoặc NoSQL) có thể lưu trữ giá trị độ dài tùy ý (và các cấu trúc dữ liệu tùy ý lý tưởng) và có thể được truy vấn trên bất kỳ trường nào.

Tôi đã tìm thấy nhiều giải pháp cơ sở dữ liệu cho Heroku, chẳng hạn như ClearDB, nhưng tất cả thông tin tôi đã xem đều cho thấy cách thiết lập Django để truy cập cơ sở dữ liệu. Vì đây là dự định để được kịch bản và không phải là một trang web, tôi thực sự không thích lặn vào Django nếu tôi không phải.

Có loại cơ sở dữ liệu nào mà tôi có thể kết nối với Heroku bằng Python mà không sử dụng Django không?

Trả lời

3

Tôi muốn sử dụng MongoDB. Heroku đã hỗ trợ cho nó, vì vậy tôi nghĩ rằng nó sẽ thực sự dễ dàng để bắt đầu và mở rộng quy mô: https://addons.heroku.com/mongohq

Giới thiệu về Python: MongoDB là một cơ sở dữ liệu thực sự dễ dàng. Lược đồ là linh hoạt và phù hợp thực sự tốt với các từ điển Python. Đó là một cái gì đó thực sự tốt.

Bạn có thể sử dụng 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) 

Khá đơn giản, uh?

Hy vọng điều đó sẽ hữu ích.

EDIT:

Như Endophage đề cập, một lựa chọn tốt cho interfacing với Mongo là mongoengine. Nếu bạn có nhiều dữ liệu để lưu trữ, bạn nên xem xét điều đó.

+1

+1 cho mongo nhưng tôi cũng khuyên bạn nên sử dụng mongoengine cung cấp lớp ORM trên đầu trang của pymongo và GridFS. – Endophage

+1

@Endophage đó là sự thật. Vì anh ta muốn đơn giản, tôi khuyên dùng Pymongo. Nhưng, tôi nên đề cập đến điều đó. Cám ơn! – santiagobasulto

+0

Lợi ích của Mongoengine đối với pymongo là gì? Nếu bất cứ điều gì, nó trông giống như mongoengine đòi hỏi các lược đồ được viết, trong khi pymongo thì không. – jdotjdot

0

Tạo cơ sở dữ liệu Heroku Postgres độc lập. http://postgres.heroku.com

+0

OK, nhưng câu hỏi vẫn là t ở đây - làm thế nào tôi sẽ treo lên nó với python? 'psycopg2'? – jdotjdot

3

Tôi đã làm điều này gần đây với Flask. (https://github.com/HexIce/flask-heroku-sqlalchemy).

Có một vài gotchas:

1. Nếu bạn không sử dụng Django bạn có thể phải thiết lập cơ sở dữ liệu của bạn mình bằng cách thực hiện:

heroku addons:add shared-database 

(Hoặc bất cứ cơ sở dữ liệu mà bạn muốn sử dụng, những người khác chi phí tiền bạc.)

2. URL cơ sở dữ liệu được lưu trữ trong Heroku trong biến môi trường "DATABASE_URL". Trong python bạn có thể nhận được nó bằng cách làm.

dburl = os.environ['DATABASE_URL'] 

Bạn làm gì để kết nối với cơ sở dữ liệu từ đó tùy thuộc vào bạn, một tùy chọn là SQLAlchemy.

+0

Không có đại diện, không thể chỉnh sửa nhưng: - [Trang cơ sở dữ liệu Heroku] (https://devcenter.heroku.com/articles/database) & [SQLAlchemy in Flask] (http://flask.pocoo.org/docs/patterns/sqlalchemy /) – chromy

+2

Thay vì 'shared-database', sử dụng' heroku-postgresql: dev' cũng miễn phí và cho phép bạn kết nối từ bên ngoài heroku, là postgres 9.1, etc: https: //postgres.heroku. com/blog/past/2012/4/26/heroku_postgres_development_plan/ – Will

19

Bạn có thể nhận cơ sở dữ liệu được cung cấp từ Heroku mà không yêu cầu ứng dụng của bạn sử dụng Django.Để thực hiện:

heroku addons:add heroku-postgresql:dev 

Nếu bạn cần một cơ sở dữ liệu chuyên dụng hơn lớn hơn, bạn có thể kiểm tra các kế hoạch tại Heroku Postgres

Trong requirements.txt của bạn, bạn sẽ muốn thêm:

psycopg2 

Sau đó, bạn có thể kết nối/tương tác với nó tương tự như sau:

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) 
+0

cảm ơn bạn rất nhiều! Tôi đã cố gắng để có được một ứng dụng bình bài xương trần chạy trong một thời gian, và tất cả mọi người muốn viết về là sqlalchemy những ngày này. –

+0

Tôi nhận được một ngoại lệ '' tại dòng với 'DATABASE_URL' bất cứ khi nào tôi cố gắng chạy nó. Bất kỳ đề xuất? –

+0

Nếu bạn đang sử dụng Flask, Flask-SQLAlchemy sẽ quay lên một nhóm kết nối và cung cấp cho bạn một lớp db.Model tốt để định nghĩa các mô hình khai báo. SQLAlchemy cung cấp cho bạn nhiều cách để tương tác với cơ sở dữ liệu của bạn. –

Các vấn đề liên quan