使用settings.py或models.py在django中自动创建数据库。

5 人关注

Current flow:

1) mysql >> CREATE {DATABASE} db_name  [create_specification] ;
2) change database info in settings.py
3) python manage.py syncdb (assuming we have ready-made models)

难道就没有一种方法可以不使用步骤1来做同样的事情。也许把数据库名称和规格放在settings.py中的某个地方,这样我就不用每次把这个项目转移到某个服务器上时都要手动配置数据库了。

EDIT- 为什么我想回避第一步。

在我的案例中,不同表的不同列有不同的整理类型。因此,在开发过程中,每当我重新创建数据库时,我需要手动改变个别列/表的配置,这很令人沮丧。

python
django
suneet
suneet
发布于 2014-04-11
5 个回答
dani herrera
dani herrera
发布于 2014-04-11
已采纳
0 人赞同

你的所有 需要知道数据库用户/密码并授予创建数据库的权限 ,所有其他数据都在设置中。你可以 连接一个自定义命令到 pre_syncdb 信号 来收集这些数据。

请看一下 创建超级用户 that is raised on post_syndb信号 to learn about this.

EDITED

syncdb已不再可用。从1.9开始,你应该使用 迁徙前 信号.

请添加一个通过的例子。对于像我这样的新手来说,这几乎就是胡言乱语。
KhoPhi
KhoPhi
发布于 2014-04-11
0 人赞同

我认为不可能回避这一步,至少如果你在django中使用不同的数据库后端,而不是SQLite。

医生们的说明。 https://docs.djangoproject.com/en/dev/intro/tutorial01/#database-setup

如果你使用的是PostgreSQL或MySQL,请确保你在此时已经创建了一个 数据库。用 "CREATE DATABASE database_name; "来做。 在你的数据库的交互式提示符下进行。

如果你使用的是SQLite,你不需要事先创建任何东西--当需要时,数据库文件会自动创建。 数据库文件将在需要时自动创建。

如果你把你的项目移到像Heroku这样的服务器上,数据库的创建是自动的,就像使用PostgreSQL时一样。

我想知道你为什么要放弃第一步,但是如果你很绝望,你可能还是想通过psycopg2尝试直接使用python的方式。

使用psycopg2创建一个postgresql数据库

Phillip
Phillip
发布于 2014-04-11
0 人赞同

授予整个应用程序数据库的创建权限,以免除在部署时的小规模手动初始化,听起来是一个坏主意。

你应该创建一个单独的脚本,为你自动部署。 布料 似乎已经成为这方面的标准工具。

alanjds
alanjds
发布于 2014-04-11
0 人赞同

消失了 django_extensions :

1) ./manage.py sqlcreate | ./manage.py dbshell
2) ./manage.py migrate

如果至少settings.py上的用户已经能够在DB上连接,并且有创建权限,这应该是可行的。