Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何删除多数据库中的django模型用户?_Python_Django_Django Models - Fatal编程技术网

Python 如何删除多数据库中的django模型用户?

Python 如何删除多数据库中的django模型用户?,python,django,django-models,Python,Django,Django Models,例如,我有一个带有两个应用程序(myapp、myapp2)的项目(mysite)。这些应用程序使用不同的数据库: settings.py: 数据库={ “默认值”:{ “引擎”:“django.db.backends.postgresql”, “主机”:“127.0.0.1”, “用户”:“postgres”, “密码”:“根”, “端口”:“5432”, “名称”:“测试”, }, “测试”:{ “引擎”:“django.db.backends.mysql”, “主机”:“127.0.0.1”

例如,我有一个带有两个应用程序(myapp、myapp2)的项目(mysite)。这些应用程序使用不同的数据库:

settings.py:

数据库={
“默认值”:{
“引擎”:“django.db.backends.postgresql”,
“主机”:“127.0.0.1”,
“用户”:“postgres”,
“密码”:“根”,
“端口”:“5432”,
“名称”:“测试”,
},
“测试”:{
“引擎”:“django.db.backends.mysql”,
“主机”:“127.0.0.1”,
“用户”:“根用户”,
“密码”:“根”,
“端口”:“3306”,
“名称”:“测试”,
},
}
然后我写了一个数据库路由器:

来自django.conf导入设置的

类别批准人:
def db_用于_读取(自身、型号、**提示):
返回设置.APP\u DB\u MAPPER.get(model.\u meta.APP\u label)
def db_用于_写入(自身、型号、**提示):
返回设置.APP\u DB\u MAPPER.get(model.\u meta.APP\u label)
def allow_关系(自身、obj1、obj2、**提示):
db1=settings.APP\u DB\u MAPPER.get(obj1.\u meta.APP\u标签)
db2=settings.APP\u DB\u MAPPER.get(obj2.\u meta.APP\u label)
如果是db1和db2:
如果db1==db2:
返回真值
其他:
返回错误
一无所获
def allow_migrate(self、db、app_标签、model_name=None、**提示):
如果settings.app\u DB\u映射器中有app\u标签:
return db==settings.APP\u db\u映射器[APP\u label]
一无所获
然后应用它

settings.py:

DATABASE_router=[“mysite.app_router.AppRouter”]
APP_DB_MAPPER={“myapp”:“default”,“myapp2”:“test”}
在每个应用程序中添加一个模型:

myapp/models.py:

来自django.db导入模型的

从django.contrib.auth.models导入用户
类TestDefault(models.Model):
name=models.CharField(最大长度=100)
user=models.OneToOneField(user,on_delete=models.SET_NULL,NULL=True)
myapp2/models.py:

来自django.db导入模型的

从django.contrib.auth.models导入用户
类TestApp(models.Model):
name=models.CharField(最大长度=100)
user=models.OneToOneField(user,on_delete=models.SET_NULL,NULL=True)
迁移后,将创建以下表:

mysql(“测试”数据库):

postgres(“默认”db):

然后我尝试在shell中测试关系:

从mysite.myapp.models导入TestDefault
从mysite.myapp2.models导入TestApp
从django.contrib.auth.models导入用户
user=user.objects.create(username=“1”)#在默认数据库中
TestDefault.objects.create(name=“123”,user=user)
user=user.objects.using(“test”).create(username=“1”)#在测试数据库中
TestApp.objects.create(name=“123”,user=user)
#然后尝试删除测试数据库中的用户
user.delete()#错误!
回溯:

---------------------------------------------------------------------------
ProgrammingError                          Traceback (most recent call last)
~/projects/learn-some/learn-some-django/test/.venv/lib/python3.7/site-packages/django/db/backends/utils.py in _execute(self, sql, params, *ignored_wrapper_args)
     83             else:
---> 84                 return self.cursor.execute(sql, params)
     85 

~/projects/learn-some/learn-some-django/test/.venv/lib/python3.7/site-packages/django/db/backends/mysql/base.py in execute(self, query, args)
     70             # args is None means no string interpolation
---> 71             return self.cursor.execute(query, args)
     72         except Database.OperationalError as e:

~/projects/learn-some/learn-some-django/test/.venv/lib/python3.7/site-packages/MySQLdb/cursors.py in execute(self, query, args)
    208         assert isinstance(query, (bytes, bytearray))
--> 209         res = self._query(query)
    210         return res

~/projects/learn-some/learn-some-django/test/.venv/lib/python3.7/site-packages/MySQLdb/cursors.py in _query(self, q)
    314         self._result = None
--> 315         db.query(q)
    316         self._do_get_result(db)

~/projects/learn-some/learn-some-django/test/.venv/lib/python3.7/site-packages/MySQLdb/connections.py in query(self, query)
    225             query = bytes(query)
--> 226         _mysql.connection.query(self, query)
    227 

ProgrammingError: (1146, "Table 'test.myapp_testdefault' doesn't exist")

The above exception was the direct cause of the following exception:

ProgrammingError                          Traceback (most recent call last)
<ipython-input-22-da112720c459> in <module>
----> 1 user.delete()

~/projects/learn-some/learn-some-django/test/.venv/lib/python3.7/site-packages/django/db/models/base.py in delete(self, using, keep_parents)
    916 
    917         collector = Collector(using=using)
--> 918         collector.collect([self], keep_parents=keep_parents)
    919         return collector.delete()
    920 

~/projects/learn-some/learn-some-django/test/.venv/lib/python3.7/site-packages/django/db/models/deletion.py in collect(self, objs, source, nullable, collect_related, source_attr, reverse_dependency, keep_parents)
    221                     if self.can_fast_delete(sub_objs, from_field=field):
    222                         self.fast_deletes.append(sub_objs)
--> 223                     elif sub_objs:
    224                         field.remote_field.on_delete(self, field, sub_objs, self.using)
    225             for field in model._meta.private_fields:

~/projects/learn-some/learn-some-django/test/.venv/lib/python3.7/site-packages/django/db/models/query.py in __bool__(self)
    276 
    277     def __bool__(self):
--> 278         self._fetch_all()
    279         return bool(self._result_cache)
    280 

~/projects/learn-some/learn-some-django/test/.venv/lib/python3.7/site-packages/django/db/models/query.py in _fetch_all(self)
   1240     def _fetch_all(self):
   1241         if self._result_cache is None:
-> 1242             self._result_cache = list(self._iterable_class(self))
   1243         if self._prefetch_related_lookups and not self._prefetch_done:
   1244             self._prefetch_related_objects()

~/projects/learn-some/learn-some-django/test/.venv/lib/python3.7/site-packages/django/db/models/query.py in __iter__(self)
     53         # Execute the query. This will also fill compiler.select, klass_info,
     54         # and annotations.
---> 55         results = compiler.execute_sql(chunked_fetch=self.chunked_fetch, chunk_size=self.chunk_size)
     56         select, klass_info, annotation_col_map = (compiler.select, compiler.klass_info,
     57                                                   compiler.annotation_col_map)

~/projects/learn-some/learn-some-django/test/.venv/lib/python3.7/site-packages/django/db/models/sql/compiler.py in execute_sql(self, result_type, chunked_fetch, chunk_size)
   1098             cursor = self.connection.cursor()
   1099         try:
-> 1100             cursor.execute(sql, params)
   1101         except Exception:
   1102             # Might fail for server-side cursors (e.g. connection closed)

~/projects/learn-some/learn-some-django/test/.venv/lib/python3.7/site-packages/django/db/backends/utils.py in execute(self, sql, params)
     97         start = time()
     98         try:
---> 99             return super().execute(sql, params)
    100         finally:
    101             stop = time()

~/projects/learn-some/learn-some-django/test/.venv/lib/python3.7/site-packages/django/db/backends/utils.py in execute(self, sql, params)
     65 
     66     def execute(self, sql, params=None):
---> 67         return self._execute_with_wrappers(sql, params, many=False, executor=self._execute)
     68 
     69     def executemany(self, sql, param_list):

~/projects/learn-some/learn-some-django/test/.venv/lib/python3.7/site-packages/django/db/backends/utils.py in _execute_with_wrappers(self, sql, params, many, executor)
     74         for wrapper in reversed(self.db.execute_wrappers):
     75             executor = functools.partial(wrapper, executor)
---> 76         return executor(sql, params, many, context)
     77 
     78     def _execute(self, sql, params, *ignored_wrapper_args):

~/projects/learn-some/learn-some-django/test/.venv/lib/python3.7/site-packages/django/db/backends/utils.py in _execute(self, sql, params, *ignored_wrapper_args)
     82                 return self.cursor.execute(sql)
     83             else:
---> 84                 return self.cursor.execute(sql, params)
     85 
     86     def _executemany(self, sql, param_list, *ignored_wrapper_args):

~/projects/learn-some/learn-some-django/test/.venv/lib/python3.7/site-packages/django/db/utils.py in __exit__(self, exc_type, exc_value, traceback)
     87                 if dj_exc_type not in (DataError, IntegrityError):
     88                     self.wrapper.errors_occurred = True
---> 89                 raise dj_exc_value.with_traceback(traceback) from exc_value
     90 
     91     def __call__(self, func):

~/projects/learn-some/learn-some-django/test/.venv/lib/python3.7/site-packages/django/db/backends/utils.py in _execute(self, sql, params, *ignored_wrapper_args)
     82                 return self.cursor.execute(sql)
     83             else:
---> 84                 return self.cursor.execute(sql, params)
     85 
     86     def _executemany(self, sql, param_list, *ignored_wrapper_args):

~/projects/learn-some/learn-some-django/test/.venv/lib/python3.7/site-packages/django/db/backends/mysql/base.py in execute(self, query, args)
     69         try:
     70             # args is None means no string interpolation
---> 71             return self.cursor.execute(query, args)
     72         except Database.OperationalError as e:
     73             # Map some error codes to IntegrityError, since they seem to be

~/projects/learn-some/learn-some-django/test/.venv/lib/python3.7/site-packages/MySQLdb/cursors.py in execute(self, query, args)
    207 
    208         assert isinstance(query, (bytes, bytearray))
--> 209         res = self._query(query)
    210         return res
    211 

~/projects/learn-some/learn-some-django/test/.venv/lib/python3.7/site-packages/MySQLdb/cursors.py in _query(self, q)
    313         db = self._get_db()
    314         self._result = None
--> 315         db.query(q)
    316         self._do_get_result(db)
    317         self._post_get_result()

~/projects/learn-some/learn-some-django/test/.venv/lib/python3.7/site-packages/MySQLdb/connections.py in query(self, query)
    224         if isinstance(query, bytearray):
    225             query = bytes(query)
--> 226         _mysql.connection.query(self, query)
    227 
    228     def _bytes_literal(self, bs):

ProgrammingError: (1146, "Table 'test.myapp_testdefault' doesn't exist")
---------------------------------------------------------------------------
编程错误回溯(最近一次调用上次)
~/projects/learn some/learn some django/test/.venv/lib/python3.7/site-packages/django/db/backends/utils.py in_execute(self、sql、params、*忽略包装器参数)
83其他:
--->84返回self.cursor.execute(sql,params)
85
执行中的~/projects/learn some/learn some django/test/.venv/lib/python3.7/site-packages/django/db/backends/mysql/base.py(self、query、args)
70#args为None表示没有字符串插值
--->71返回self.cursor.execute(查询,参数)
72数据库除外。错误为e:
执行中的~/projects/learn some/learn some django/test/.venv/lib/python3.7/site-packages/MySQLdb/cursors.py(self、query、args)
208断言isinstance(查询,(字节,字节数组))
-->209 res=自我查询(查询)
210返回res
~/projects/learn some/learn some django/test/.venv/lib/python3.7/site-packages/MySQLdb/cursors.py in_query(self,q)
314自身结果=无
-->315分贝查询(q)
316自测结果(db)
查询中的~/projects/learn some/learn some django/test/.venv/lib/python3.7/site-packages/MySQLdb/connections.py(self,query)
225查询=字节(查询)
-->226_mysql.connection.query(self,query)
227
编程错误:(1146,“表'test.myapp_testdefault'不存在”)
上述异常是以下异常的直接原因:
编程错误回溯(最近一次调用上次)
在里面
---->1用户。删除()
删除中的~/projects/learn some/learn some django/test/.venv/lib/python3.7/site-packages/django/db/models/base.py(self、using、keep_parents)
916
917收集器=收集器(使用=使用)
-->918收集器。收集([自身],保留家长=保留家长)
919返回收集器。删除()
920
收集中的~/projects/learn some/learn some django/test/.venv/lib/python3.7/site-packages/django/db/models/deletation.py(self、objs、source、nullable、collect\u related、source\u attr、reverse\u dependency、keep\u parents)
221如果自身可以快速删除(子对象,从字段=字段):
222 self.fast_deletes.append(sub_objs)
-->223 elif子对象:
224字段。远程字段。on_删除(self、field、sub_objs、self.using)
225用于模型中的字段。_meta.private_字段:
~/projects/learn-some/learn-some-django/test/.venv/lib/python3.7/site-packages/django/db/models/query.py in(self)
276
277 def__________(自):
-->278 self.\u fetch\u all()
279返回布尔值(自身结果缓存)
280
~/projects/learn some/learn some django/test/.venv/lib/python3.7/site-packages/django/db/models/query.py in_fetch_all(self)
1240 def_fetch_all(self):
1241如果self.\u result\u缓存为无:
->1242 self.\u result\u cache=list(self.\u iterable\u class(self))
1243如果自预取相关查找和非自预取完成:
1244自我预取
+----------+----------------------------+--------+----------+
| Schema   | Name                       | Type   | Owner    |
|----------+----------------------------+--------+----------|
| public   | auth_group                 | table  | postgres |
| public   | auth_group_permissions     | table  | postgres |
| public   | auth_permission            | table  | postgres |
| public   | auth_user                  | table  | postgres |
| public   | auth_user_groups           | table  | postgres |
| public   | auth_user_user_permissions | table  | postgres |
| public   | django_admin_log           | table  | postgres |
| public   | django_content_type        | table  | postgres |
| public   | django_migrations          | table  | postgres |
| public   | django_session             | table  | postgres |
| public   | myapp_testdefault          | table  | postgres |
+----------+----------------------------+--------+----------+
---------------------------------------------------------------------------
ProgrammingError                          Traceback (most recent call last)
~/projects/learn-some/learn-some-django/test/.venv/lib/python3.7/site-packages/django/db/backends/utils.py in _execute(self, sql, params, *ignored_wrapper_args)
     83             else:
---> 84                 return self.cursor.execute(sql, params)
     85 

~/projects/learn-some/learn-some-django/test/.venv/lib/python3.7/site-packages/django/db/backends/mysql/base.py in execute(self, query, args)
     70             # args is None means no string interpolation
---> 71             return self.cursor.execute(query, args)
     72         except Database.OperationalError as e:

~/projects/learn-some/learn-some-django/test/.venv/lib/python3.7/site-packages/MySQLdb/cursors.py in execute(self, query, args)
    208         assert isinstance(query, (bytes, bytearray))
--> 209         res = self._query(query)
    210         return res

~/projects/learn-some/learn-some-django/test/.venv/lib/python3.7/site-packages/MySQLdb/cursors.py in _query(self, q)
    314         self._result = None
--> 315         db.query(q)
    316         self._do_get_result(db)

~/projects/learn-some/learn-some-django/test/.venv/lib/python3.7/site-packages/MySQLdb/connections.py in query(self, query)
    225             query = bytes(query)
--> 226         _mysql.connection.query(self, query)
    227 

ProgrammingError: (1146, "Table 'test.myapp_testdefault' doesn't exist")

The above exception was the direct cause of the following exception:

ProgrammingError                          Traceback (most recent call last)
<ipython-input-22-da112720c459> in <module>
----> 1 user.delete()

~/projects/learn-some/learn-some-django/test/.venv/lib/python3.7/site-packages/django/db/models/base.py in delete(self, using, keep_parents)
    916 
    917         collector = Collector(using=using)
--> 918         collector.collect([self], keep_parents=keep_parents)
    919         return collector.delete()
    920 

~/projects/learn-some/learn-some-django/test/.venv/lib/python3.7/site-packages/django/db/models/deletion.py in collect(self, objs, source, nullable, collect_related, source_attr, reverse_dependency, keep_parents)
    221                     if self.can_fast_delete(sub_objs, from_field=field):
    222                         self.fast_deletes.append(sub_objs)
--> 223                     elif sub_objs:
    224                         field.remote_field.on_delete(self, field, sub_objs, self.using)
    225             for field in model._meta.private_fields:

~/projects/learn-some/learn-some-django/test/.venv/lib/python3.7/site-packages/django/db/models/query.py in __bool__(self)
    276 
    277     def __bool__(self):
--> 278         self._fetch_all()
    279         return bool(self._result_cache)
    280 

~/projects/learn-some/learn-some-django/test/.venv/lib/python3.7/site-packages/django/db/models/query.py in _fetch_all(self)
   1240     def _fetch_all(self):
   1241         if self._result_cache is None:
-> 1242             self._result_cache = list(self._iterable_class(self))
   1243         if self._prefetch_related_lookups and not self._prefetch_done:
   1244             self._prefetch_related_objects()

~/projects/learn-some/learn-some-django/test/.venv/lib/python3.7/site-packages/django/db/models/query.py in __iter__(self)
     53         # Execute the query. This will also fill compiler.select, klass_info,
     54         # and annotations.
---> 55         results = compiler.execute_sql(chunked_fetch=self.chunked_fetch, chunk_size=self.chunk_size)
     56         select, klass_info, annotation_col_map = (compiler.select, compiler.klass_info,
     57                                                   compiler.annotation_col_map)

~/projects/learn-some/learn-some-django/test/.venv/lib/python3.7/site-packages/django/db/models/sql/compiler.py in execute_sql(self, result_type, chunked_fetch, chunk_size)
   1098             cursor = self.connection.cursor()
   1099         try:
-> 1100             cursor.execute(sql, params)
   1101         except Exception:
   1102             # Might fail for server-side cursors (e.g. connection closed)

~/projects/learn-some/learn-some-django/test/.venv/lib/python3.7/site-packages/django/db/backends/utils.py in execute(self, sql, params)
     97         start = time()
     98         try:
---> 99             return super().execute(sql, params)
    100         finally:
    101             stop = time()

~/projects/learn-some/learn-some-django/test/.venv/lib/python3.7/site-packages/django/db/backends/utils.py in execute(self, sql, params)
     65 
     66     def execute(self, sql, params=None):
---> 67         return self._execute_with_wrappers(sql, params, many=False, executor=self._execute)
     68 
     69     def executemany(self, sql, param_list):

~/projects/learn-some/learn-some-django/test/.venv/lib/python3.7/site-packages/django/db/backends/utils.py in _execute_with_wrappers(self, sql, params, many, executor)
     74         for wrapper in reversed(self.db.execute_wrappers):
     75             executor = functools.partial(wrapper, executor)
---> 76         return executor(sql, params, many, context)
     77 
     78     def _execute(self, sql, params, *ignored_wrapper_args):

~/projects/learn-some/learn-some-django/test/.venv/lib/python3.7/site-packages/django/db/backends/utils.py in _execute(self, sql, params, *ignored_wrapper_args)
     82                 return self.cursor.execute(sql)
     83             else:
---> 84                 return self.cursor.execute(sql, params)
     85 
     86     def _executemany(self, sql, param_list, *ignored_wrapper_args):

~/projects/learn-some/learn-some-django/test/.venv/lib/python3.7/site-packages/django/db/utils.py in __exit__(self, exc_type, exc_value, traceback)
     87                 if dj_exc_type not in (DataError, IntegrityError):
     88                     self.wrapper.errors_occurred = True
---> 89                 raise dj_exc_value.with_traceback(traceback) from exc_value
     90 
     91     def __call__(self, func):

~/projects/learn-some/learn-some-django/test/.venv/lib/python3.7/site-packages/django/db/backends/utils.py in _execute(self, sql, params, *ignored_wrapper_args)
     82                 return self.cursor.execute(sql)
     83             else:
---> 84                 return self.cursor.execute(sql, params)
     85 
     86     def _executemany(self, sql, param_list, *ignored_wrapper_args):

~/projects/learn-some/learn-some-django/test/.venv/lib/python3.7/site-packages/django/db/backends/mysql/base.py in execute(self, query, args)
     69         try:
     70             # args is None means no string interpolation
---> 71             return self.cursor.execute(query, args)
     72         except Database.OperationalError as e:
     73             # Map some error codes to IntegrityError, since they seem to be

~/projects/learn-some/learn-some-django/test/.venv/lib/python3.7/site-packages/MySQLdb/cursors.py in execute(self, query, args)
    207 
    208         assert isinstance(query, (bytes, bytearray))
--> 209         res = self._query(query)
    210         return res
    211 

~/projects/learn-some/learn-some-django/test/.venv/lib/python3.7/site-packages/MySQLdb/cursors.py in _query(self, q)
    313         db = self._get_db()
    314         self._result = None
--> 315         db.query(q)
    316         self._do_get_result(db)
    317         self._post_get_result()

~/projects/learn-some/learn-some-django/test/.venv/lib/python3.7/site-packages/MySQLdb/connections.py in query(self, query)
    224         if isinstance(query, bytearray):
    225             query = bytes(query)
--> 226         _mysql.connection.query(self, query)
    227 
    228     def _bytes_literal(self, bs):

ProgrammingError: (1146, "Table 'test.myapp_testdefault' doesn't exist")