我正在研究Python / Django项目,我们需要使用两个数据库。在文档之后,我添加了第二个数据库,如下所示:
DATABASE_URL = os.getenv('DATABASE_URL', 'postgres://*******:********@aws-us-***********:*****/*****')
CURRENCIES_URL = os.getenv('CURRENCIES_URL', 'postgres://*******:********@aws-us-***********:*****/*****')
DATABASES = {
'default': dj_database_url.parse(DATABASE_URL),
'currencies': dj_database_url.parse(CURRENCIES_URL)
}
parse()方法以对象期望的格式返回数据。
然后,我有这段代码:
currencies = connection['currencies'].cursor()
基本上,这允许我在数据库上运行自定义SQL代码,方法是返回光标并将其存储在currencies
但是,在运行此代码时,我会在控制台中看到它:
url(r'^', include('btcmag.urls', namespace="btcmag")),
File "/Users/john/.virtualenvs/btcmag/lib/python2.7/site-packages/django/conf/urls/__init__.py", line 50, in include
urlconf_module = import_module(urlconf_module)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/importlib/__init__.py", line 37, in import_module
__import__(name)
File "/Users/john/btcmag/btcmag/urls.py", line 7, in <module>
from . import views
File "/Users/john/btcmag/btcmag/views.py", line 4, in <module>
from .apis import getTrendingArticles, getTickers, getCurrency, getHistory
File "/Users/john/btcmag/btcmag/apis.py", line 9, in <module>
currencies = connection['currencies'].cursor()
TypeError: 'DefaultConnectionProxy' object has no attribute '__getitem__'
一些澄清:
当我只运行currencies = connection.cursor()
时,它使用default
数据库并且运行正常,这告诉我它不是连接模块
如果我在数据库设置中切换currencies
和default
,它也可以正常运行currencies = connection.cursor()
- 默认情况下使用货币数据库。所以数据库也不是问题。
这可能导致什么问题?
答案 0 :(得分:3)
您的代码中有一个小而致命的拼写错误。它应该是django.db.connections
而不是您的connection
(您没有指明来自哪里)。
引自https://docs.djangoproject.com/en/1.11/topics/db/sql/#executing-custom-sql-directly
如果您使用多个数据库,则可以使用 django.db.connections获取连接(和游标) 特定数据库。
django.db.connections
是一个类似字典的对象 允许您使用别名检索特定连接:from django.db import connections cursor = connections['my_db_alias'].cursor() # Your code here...
答案 1 :(得分:1)
您无法使用括号表示法访问connection
。
也许这会奏效:
currencies = DATABASES['currencies'].cursor()