Django - South - 如何查看运行的SQL?

28 投票
5 回答
10950 浏览
提问于 2025-04-16 16:39

我想做的事情是这样的。

在一个开发服务器上开发一个Django项目,并使用一个开发用的数据库。当我修改模型时,运行south迁移来更新数据库。

把每次迁移生成的SQL语句保存下来,等我准备好上线时,把这些SQL语句应用到生产服务器上。

这样的操作在使用South时可行吗?(我也想知道其他人在使用Django时,如何把开发数据库的更改应用到生产环境中)

5 个回答

3

你可以尝试记录数据库连接中的SQL查询,使用一个管理命令来调用迁移,并加上一个干运行的选项:


from django.core.management.base import BaseCommand
from django import db

class Command(BaseCommand):
    help = 'Output SQL for migration'

    def handle(self, *app_labels, **options):
        # assumes DEBUG is True in settings
        db.reset_queries()

        from django.core.management import call_command
        kw = {'db-dry-run': 1,  'verbosity': 0}
        call_command('migrate', **kw)

        for query in db.connection.queries:
            print query['sql']

假设south会通过正常的数据库接口处理所有内容,这样应该就能工作。不过在查询历史表时,会多出一些额外的选择。

你可以把这个放在你的应用中的 management/commands/print_migration_sql.py 文件里,然后运行它:


python manage.py print_migration_sql

这个功能可能很容易扩展,只针对特定的应用运行等等。

8
 python manage.py sqlmigrate <app_label> <migration_name>

当然可以!请把你想要翻译的内容发给我,我会帮你把它变得简单易懂。

50

你可以通过运行 manage.py migrate --db-dry-run --verbosity=2 来查看生成的 SQL 语句。这条命令不会对数据库做任何修改,只是会显示所有的 SQL 语句。不过,我还是建议你先备份一下数据库,预防万一总是好的。

撰写回答