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

时间:2014-04-11 09:33:27

标签: python django

当前流程:

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的某处,这样我每次移动这个项目时都不必手动配置数据库某个服务器

编辑 - 为什么我要躲避第一步:

在我的例子中,不同表的不同列具有不同的排序规则类型。因此,在开发时,每当我重新创建数据库时,我都需要手动更改单个列/表的配置,这令人沮丧。

6 个答案:

答案 0 :(得分:2)

我认为不可能躲避第一步,至少如果你使用的是另一个数据库后端,除了django中的SQLite。

来自文档的说明:https://docs.djangoproject.com/en/dev/intro/tutorial01/#database-setup

  

如果你正在使用PostgreSQL或MySQL,请确保你已经创建了一个   数据库到此为止。使用“CREATE DATABASE database_name;”执行此操作   在数据库的交互式提示中。

     

如果您使用的是SQLite,则无需事先创建任何内容 -   数据库文件将在需要时自动创建。

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

我想知道为什么你想要第一步,但如果你绝望,你可能仍然想通过psycopg2尝试直接python方式

Creating a postgresql DB using psycopg2

答案 1 :(得分:2)

需要的是使用grant create database 了解数据库用户/密码,所有其他数据都在设置中。您可以将自定义命令连接到pre_syncdb信号以收集此数据。

看看在post_syndb信号上引发的createsuperuser,了解这一点。

<强> EDITED

syncdb不再可用。从1.9开始,你应该使用pre_migrate信号。

答案 2 :(得分:2)

通过django_extensions完成

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

如果至少settings.py上的用户已经能够在数据库上建立连接并具有创建权限,那么这应该可行。

要拥有它,我建议提供一个envvar DATABASE_URL并使用dj_database_url

至少在Postgres上为我工作。

答案 3 :(得分:1)

您仍然处于开发阶段时可以使用sqlite。

答案 4 :(得分:1)

授予整个应用程序数据库创建权限以在部署时节省次要的手动初始化听起来是个坏主意。

您应该创建一个单独的脚本来自动部署。 Fabric似乎已成为此标准工具。

答案 5 :(得分:0)

不,这是不可能的。无论如何,如果可以的话,你必须指定root密码才能创建数据库。