簡體   English   中英

Django manage.py sqlclear省略了一些表

[英]Django manage.py sqlclear omit some tables

我編寫了python腳本來刪除所有Django應用程序中的表。 (使用settings.INSTALLED_APP)

https://gist.github.com/1520683

我的django項目在運行manage.py syncdb之后創建了41個表,但是我的腳本說只刪除了40個表。 所以,我檢查的結果sqlall和結果sqlclear 我透露sqlclear省略了一個存儲ManyToManyField關系的表。

我知道drop database比上面的腳本簡單得多。 但我很困惑為什么django管理或管理腳本在運行sql命令時省略了一些表。


下面的模型在運行syncdb創建common_userbook_purchasedBooks表,但在sqlclear命令中沒有。

class UserBook(models.Model):                       
    user = models.OneToOneField(User)
    purchasedBooks = models.ManyToManyField(Book)

補充)所以,我正在使用另一種方法。 https://gist.github.com/1520810

lqez,我猜這個問題與你的本地環境有關,因為對於Django 1.3.1,Python 2.7.2

對於模型

from django.contrib.auth.models import User
from django.db import models

class Book(models.Model):
    name = models.CharField(max_length=10)

class UserBook(models.Model):
    user = models.OneToOneField(User)
    purchasedBooks = models.ManyToManyField(Book)

當我運行(.env)testme$ ./manage.py sqlclear testapp輸出看起來像

sqlite3的

BEGIN;
DROP TABLE "testapp_userbook";
DROP TABLE "testapp_userbook_purchasedBooks";
DROP TABLE "testapp_book";
COMMIT;

postgresql_psycopg2

BEGIN;
ALTER TABLE "testapp_userbook_purchasedBooks" DROP CONSTRAINT "userbook_id_refs_id_8bda4b0";
DROP TABLE "testapp_userbook";
DROP TABLE "testapp_userbook_purchasedBooks";
DROP TABLE "testapp_book";
COMMIT;

MySQL的

BEGIN;
ALTER TABLE `testapp_userbook_purchasedBooks` DROP FOREIGN KEY `userbook_id_refs_id_8bda4b0`;
DROP TABLE `testapp_userbook`;
DROP TABLE `testapp_userbook_purchasedBooks`;
DROP TABLE `testapp_book`;
COMMIT;

使用introspection也可以稍微改進你的腳本:

from django.db import connection
cursor = connection.cursor()
connection.introspection.get_table_list(cursor)

[u'auth_group', u'auth_group_permissions', u'auth_message', u'auth_permission', u'auth_user', u'auth_user_groups', u'auth_user_user_permissions', u'django_content_type', u'django_session', u'django_site', u'testapp_book', u'testapp_userbook', u'testapp_userbook_purchasedBooks']

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM