数据库配置
记住这些理念之后,让我们来开始 Django 数据库层的探索。 首先,我们需要做些初始配置;我们需要告诉Django使用什么数据库以及如何连接数据库。
我们假定你已经完成了数据库服务器的安装和激活,并且已经在其中创建了数据库(例如,用 CREATE DATABASE
语句)。 如果你使用SQLite,不需要这步安装,因为SQLite使用文件系统上的独立文件来存储数据。
象前面章节提到的 TEMPLATE_DIRS
一样,数据库配置也是在Django的配置文件里,缺省 是 settings.py
。 打开这个文件并查找数据库配置:
DATABASE_ENGINE = ''
DATABASE_NAME = ''
DATABASE_USER = ''
DATABASE_PASSWORD = ''
DATABASE_HOST = ''
DATABASE_PORT = ''
配置纲要如下。
DATABASE_ENGINE
告诉Django使用哪个数据库引擎。 如果你在 Django 中使用数据库,DATABASE_ENGINE
必须是 Table 5-1 中所列出的值。<table class="cn docutils" id="cn43"><caption>表 5-1. 数据库引擎设置 </caption><colgroup><col width="28%"> <col width="14%"> <col width="58%"></colgroup> <thead valign="bottom"><tr><th>设置</th><th>数据库</th><th>所需适配器</th></tr></thead><tbody valign="top"><tr><td>postgresql
</td><td>PostgreSQL</td><td>psycopg
1.x版, [http://www.djangoproject.com/r/python-pgsql/1/。</td></tr>](http://www.djangoproject.com/r/python-pgsql/1/。;<tr><td>postgresql_psycopg2
</td><td>PostgreSQL</td><td>psycopg
2.x版, [http://www.djangoproject.com/r/python-pgsql/。</td></tr>](http://www.djangoproject.com/r/python-pgsql/。;<tr><td>mysql
</td><td>MySQL</td><td>MySQLdb
, [http://www.djangoproject.com/r/python-mysql/.</td></tr>](http://www.djangoproject.com/r/python-mysql/.;<tr><td>sqlite3
</td><td>SQLite</td><td>如果使用Python 2.5+则不需要适配器。 否则就使用pysqlite
, [http://www.djangoproject.com/r/python-sqlite/。</td></tr>](http://www.djangoproject.com/r/python-sqlite/。;<tr><td>oracle
</td><td>Oracle</td><td>cx_Oracle
, [http://www.djangoproject.com/r/python-oracle/.</td></tr>](http://www.djangoproject.com/r/python-oracle/.;</tbody></table>要注意的是无论选择使用哪个数据库服务器,都必须下载和安装对应的数据库适配器。 访问表 5-1 中“所需适配器”一栏中的链接,可通过互联网免费获取这些适配器。 如果你使用Linux,你的发布包管理系统会提供合适的包。 比如说查找python-postgresql
或者python-psycopg
的软件包。配置示例:
DATABASE_ENGINE = 'postgresql_psycopg2'
DATABASE_NAME
将数据库名称告知 Django 。 例如:
DATABASE_NAME = 'mydb'
如果使用 SQLite,请对数据库文件指定完整的文件系统路径。 例如:
DATABASE_NAME = '/home/django/mydata.db'
在这个例子中,我们将SQLite数据库放在/home/django目录下,你可以任意选用最合适你的目录。DATABASE_USER
告诉 Django 用哪个用户连接数据库。 例如: 如果用SQLite,空白即可。DATABASE_PASSWORD
告诉Django连接用户的密码。 SQLite 用空密码即可。DATABASE_HOST
告诉 Django 连接哪一台主机的数据库服务器。 如果数据库与 Django 安装于同一台计算机(即本机),可将此项保留空白。 如果你使用SQLite,此项留空。此处的 MySQL 是一个特例。 如果使用的是 MySQL 且该项设置值由斜杠('/'
)开头,MySQL 将通过 Unix socket 来连接指定的套接字,例如:
DATABASE_HOST = '/var/run/mysql'
一旦在输入了那些设置并保存之后应当测试一下你的配置。 我们可以在mysite
项目目录下执行上章所提到的python manage.py shell
来进行测试。 (我们上一章提到过在,manager.py shell
命令是以正确Django配置启用Python交互解释器的一种方法。 这个方法在这里是很有必要的,因为Django需要知道加载哪个配置文件来获取数据库连接信息。)
输入下面这些命令来测试你的数据库配置:
>>> from django.db import connection
>>> cursor = connection.cursor()
如果没有显示什么错误信息,那么你的数据库配置是正确的。 否则,你就得 查看错误信息来纠正错误。 表 5-2 是一些常见错误。
错误信息 | 解决方法 |
---|---|
You haven’t set the DATABASEENGINE setting yet. | 不要以空字符串配置DATABASE_ENGINE 的值。 表格 5-1 列出可用的值。 |
Environment variable DJANGOSETTINGSMODULE is undefined. | 使用python manager.py shell 命令启动交互解释器,不要以python 命令直接启动交互解释器。 |
Error loading __ module: No module named _. | 未安装合适的数据库适配器 (例如, psycopg 或 MySQLdb )。Django并不自带适配器,所以你得自己下载安装。 |
_ isn’t an available database backend. | 把DATABASE_ENGINE 配置成前面提到的合法的数据库引擎。 也许是拼写错误? |
database _ does not exist | 设置DATABASE_NAME 指向存在的数据库,或者先在数据库客户端中执行合适的CREATE DATABASE 语句创建数据库。 |
role _ does not exist | 设置DATABASE_USER 指向存在的用户,或者先在数据库客户端中执创建用户。 |
could not connect to server | 查看DATABASE_HOST和DATABASE_PORT是否已正确配置,并确认数据库服务器是否已正常运行。 |
当前内容版权归 wizardforcel 或其关联方所有,如需对内容或内容相关联开源项目进行关注与资助,请访问 wizardforcel .