Python Django manage.py sqlclear忽略一些表
我编写了python脚本,用于在所有Django应用程序中删除表。(使用设置。已安装的应用程序) 我的django项目在运行Python Django manage.py sqlclear忽略一些表,python,django,django-models,Python,Django,Django Models,我编写了python脚本,用于在所有Django应用程序中删除表。(使用设置。已安装的应用程序) 我的django项目在运行manage.py syncdb后创建41个表,但我的脚本说只会删除40个表。因此,我检查了sqlall的结果和sqlclear的结果。我发现sqlclear省略了一个存储ManyToManyField关系的表 我知道drop database比上面的脚本简单得多。但我不明白为什么django admin或manage脚本在运行sql命令时忽略了一些表 下面的模型在运行
manage.py syncdb
后创建41个表,但我的脚本说只会删除40个表。因此,我检查了sqlall
的结果和sqlclear
的结果。我发现sqlclear
省略了一个存储ManyToManyField
关系的表
我知道drop database
比上面的脚本简单得多。但我不明白为什么django admin或manage脚本在运行sql命令时忽略了一些表
下面的模型在运行
syncdb
时创建common\u userbook\u purchasedBooks
表,但不在sqlclear
命令中创建
class UserBook(models.Model):
user = models.OneToOneField(User)
purchasedBooks = models.ManyToManyField(Book)
(补充)因此,我正在使用另一种方法。
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
postgresql_psycopg2
mysql
此外,您的脚本还可以使用内省进行一些改进:
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']
遗漏的表格的名称是什么?@SimonKagwi我附上了我的模型。感谢您的测试!我在Python2.7.1(r271:86832,2011年7月31日,19:30:53)+Django 1.3.1上得到了上述坏结果。通过全新的Django项目(相同的环境),这种症状不会再次出现。所以这看起来不取决于环境。无论如何,感谢您的发帖。在测试期间,我发现syncdb使用models.py生成sql,反之亦然,sqlclear检查数据库。也许这张桌子坏了?
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;
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;
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']