使用PostgreSQL配置Django South

3

我无法使用south使我的网站运行起来。我已经成功安装了south,并且可以成功地导入south。

./manage.py shell
>>> import south
>>>

然而,一旦我将'south'添加到INSTALLED_APPS中并运行./manage.py syncdb(完成安装),我会得到以下错误:
“您的数据库中没有South数据库模块'south.db.django.db.backends.postgresql_psycopg2'。请选择受支持的数据库,检查SOUTH_DATABASE_ADAPTER [S]设置或从INSTALLED_APPS中删除South。”
我正在使用PostgreSQL数据库和postgresql_psycopg2库。 我很困惑,因为Postgres绝对是受支持的数据库。 我需要在settings.py中手动配置SOUTH_DATABASE_ADAPTER吗?
编辑:以下是我的数据库设置。 我知道它们有效 - 我正在尝试让这个服务器(测试)正常运行已经几周了。
DATABASE_ENGINE = 'postgresql_psycopg2' 
DATABASE_NAME = 'iknowthisiscorrect' 
DATABASE_HOST = '' #localhost
DATABASE_PORT = '5432'  # I've configured Postgres to use this port

对我来说,使用Django 1.2.1与South 0.7.1以及Postgresql 8.3可以正常工作。您使用的是哪个版本的Django、South和Postgresql? - Manoj Govindan
4个回答

3

这实际上是south的后续版本中的一个bug,它们不完全向后兼容,并且假定导入django.db.utils,在django 1.2之前不存在该模块。

您可以基本地解决这个问题,打开 south/db/generic.py 并编辑第6行:

try:
    from django.db.utils import DatabaseError
except:
    from django.db import DatabaseError

注意:这个导入语句也在其他的db/*.py文件中,但我没有使用oracle或firebird,因此没有对这些进行测试。
第二点注意:django 1.1事务不支持别名,可能无法让south正常工作。

2
你使用的South和Django版本是哪些?如果你使用的是Django 1.2,那么你需要使用最新版本的South。
South代码库中的这一行显示,如果没有设置特定的SOUTH_DATABASE_ADAPTERS,它将从主项目设置文件的数据库设置中设置自己的数据库适配器。这意味着你的数据库设置本身可能是错误的。
请更新你的问题,并附上你的数据库设置(不包括密码)。

PS - 我大部分时间都在使用South + Postgres,所以它确实可行;o) - Steve Jalim
你说得对——这是一个版本问题。我使用的是Django 1.1.1。升级到1.2后问题解决了。 - raviv

1

如果您正在使用Django 1.1,使用South 0.7.0应该可以正常工作。您可以从这里下载它。我不知道其他版本是否可行,我只尝试过针对Postgres 8.3和8.4的0.7.0版本。


1

我在南方的源代码中发现了这条评论。看一下第63行。

 63     # This error should only be triggered on 1.1 and below. 
64      sys.stderr.write( 
65          ( 
66              "There is no South database module '%s' for your database. " + \ 
67              "Please either choose a supported database, check for " + \ 
68              "SOUTH_DATABASE_ADAPTER[S] settings, " + \ 
69              "or remove South from INSTALLED_APPS.\n" 
70          ) % (module_name,) 

你使用的 Django 版本是哪个?是 <=1.1 吗?

是的,我正在使用1.1.1版本。让我尝试升级到Django 1.2。 - raviv
是的,升级到Django 1.2解决了这个问题。 - raviv

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接