简介:今天,首席CTO注释要与您分享如何与Django进行比较数据库密码。如果您可以解决您现在面临的问题,请不要忘记注意此网站。让我们现在开始!
使用多个数据库
Django 1.2中的新内容:请,请参阅发行说明
大多数其他文档都假定假设一个数据库。本文主要讨论如何在django中使用多个数据库。使用多个数据库添加一些步骤。
定义您的数据库
使用Multi -Data库的第一步是设置要通过数据库使用的数据库服务。此设置用于绘制当事方和特定连接设置字典,这是DJANGO定义数据库的一致方法。请参阅数据库文档文档。在字典中。
您要在使用数据库之前使用。
这是一个settings.py代码平板电脑,定义两个数据库。定义默认的PostgreSQL数据库和一个称为用户的MySQL数据库:
:{'name':'user_data','引擎':'django.db.backends.mql','user':'mysql_user','password':'priv4te}}}}}}}}
如果您尝试访问数据库设置中未定义的数据库,Django将抛出Django.db.utils.connectiondotexist异常。
同步您的数据库
SynCDB Management命令一次仅操作一个数据库。在默认情况下,它操作默认数据库。但是添加-DATABASE参数,您可以使SynCDB同步不同的数据库。,您可以使用以下命令:
$ https://www.shouxicto.com/article/manage.py syncdb
$ https://www.shouxicto.com/article/manage.py syncdb -database =用户
如果您不同步同一数据库中的所有程序,则可以定义数据库路由以实现指定模型的特定控制策略。
如果要仔细控制同步,则有另一种方法可以修改SQLALL的输出,手动在数据库中执行命令,该命令如下:
$ https://www.shouxicto.com/article/manage.py sqlass销售|https://www.shouxicto.com/article/manage.py dbshell
使用其他管理命令
其他操作数据库的django-admin.py命令类似于SynCDB。他们一次仅操作一个数据库,然后使用 - 数据库来控制使用哪个数据库。
自动数据库路由
使用最简单的数据库的最简单方法是设置数据库路由解决方案。默认路由方案确保对象“关闭”其原始数据库(例如:哪个数据库是从获得数据库的哪个数据库,以及保存哪个数据库)。默认路由方案还确保如果未指定数据库,则所有查询将对默认数据库作用。
您不必为启动默认路由方案做任何事情,因为它“立即使用”。但是,如果要执行一些更有趣的数据库分配行为,则可以定义和安装自己的数据库路由。
数据库路由
数据库路由是类。此类最多有四种方法:
db_for_read(模型,**提示)
建议模型对象使用操作过程中使用的数据库。
如果数据库操作可以为选择数据库提供其他信息,则可以通过提示字典提供。请参见下面的详细信息。
如果没有建议,请无返回。
db_for_write(模型,**提示)
建议模型对象读取操作过程中使用的数据库。
如果数据库操作可以为选择数据库提供其他信息,则可以通过提示字典提供。请参见下面的详细信息。
如果没有建议,请无返回。
laster_relation(obj1,obj2,**提示)
当obj1和obj2之间存在关系时,返回了true,不允许返回错误,或者在没有意见时返回,这是一个纯粹的验证操作,该操作用于该操作外部钥匙和多个操作。
laster_syncdb(db,型号)
确定该模型是否可以与DB的数据库同步为别名。如果您可以返回true,如果您不能返回false,或者在没有意见时返回无返回。此方法用于确定给定数据库的模型是否为可用的。
一种路由不需要提供所有这些方法,这些方法可以省略其中一个或多个。如果省略了其中一种方法,则Django将在执行相关检查期间跳过相应的路线。
提示参数
数据库路由收到的“提示”参数可用于确定哪个数据库应接收给定的请求。
目前,可以提供的唯一提示参数是一个实例,即与读取操作相关的实例。它可以是保留对象的实例,也可以是添加到更多关系中的实例。在某些情况下,也可能会提供一个实例。路由检查实例是否存在,并决定是否相应地更改路线行为。
使用路线
数据库路由是使用Database_routers设置安装的。此设置定义了类名的列表,每个类都定义了主路由的路由(django.db.router)。
主要路由用于Django分配的数据库操作。查询想知道使用哪个数据库时,它将提供模型和提示(如果是这样),并调用主路由。
Django将按顺序尝试每条路线,
在找到适当的路由建议之前。如果找不到路由,您将尝试实例提示的当前_state.db。如果没有路由提示,或者实例没有当前数据库状态,则
主要路由将分配默认数据库。
一个例子
例如目的!
此示例仅用于显示数据库的使用。此示例有意忽略一些复杂的事物,以方便如何更好地显示路线。
如果任何MyApp中的模型都包含另一个数据库中的模型的关系,则此示例无效。请参阅交叉数据库关系部分中介绍的Django参考完整性问题。
此示例的主要/来自该示例的配置也有缺陷:它不处理复制延迟(例如,因为通过将写作操作传递给数据库生成的查询是不一致的),并且不考虑与数据库使用情况的交互战略。
那么,此示例有什么用?此示例仅用于在其他数据库中演示MyApp存在。所有其他模型都是主/一致的,并且存在于Master,Slave1和Slave2数据库中。此示例使用两个路由:
类MyApprouter(Object):“” A“”“”“”“”“”“”“”“”“”“”“”“”“”“”“”“”。myApp':返回'''返回none def def db_for_write(self,model,**提示):“ myapp应用程序中模型的操作到'other''if model._meta.app_lbel =='app_label ='app_label ='meta。:返回'其他'返回none none def lasse_relation(self,obj1,obj2,**提示):“如果模型包含myApp应用程序,则允许所有关系”如果OBJ1._META.APP_LABEL =='或obj2.2._Meta.app_Meta.app_label.app_label=='myApp':返回true return none def alle def clays_syncdb(self,db,model):“确保仅在'其他'数据库中存在myApp应用程序,db =='deother':return model._meta._meta.app_labep_labep_label.app_labep_labep_labep_labep_label。“”):“所有阅读操作都指向一个随机数据库“返回random.choice(['slave1','slave2'])def db_for_write(self,model,**提示):“所有写作操作都指向主数据库“ return'” return'master'def lasse_relation(self,obj1,obj2,**提示):“数据库池中两个对象之间的任何关系”db_list =('ma ma master','slave1','slave2')如果obj1._state.db在db_list中和obj2._state.db in db_list中:返回true true return none def none def allof def allo def alle def alle def alle def alle def alle def。返回true
然后在设置文件中添加以下内容(将路径替换为您定义路由的模型路径):)::):
database_routers = ['path.to.myapprouter','path.to.Masterslaverouter']]
在此设置中,路由的顺序非常重要,因为查询是按查询期间按顺序查询的。在上面的示例中,myApprouter首先放置在Masterslaverouter中,因此MyApp中的模型优先于其他型号。IF。更改了数据库_ROUTER设置中两个路由的顺序,然后将首先执行MasterSlaverouter.alla_syncdb()。由于Masterslaverouter都是 - 包含 - 这将导致所有模型使用所有数据库。
设置后,让我们运行一些代码:
#获fred = user.objects.gets(username ='fred')fred.firt_name ='frederick'#database fred.save.save()#person.objects.gets.get(name ='douglas adams')#何时新对象是创建的,没有分配的数据库MH = book(title ='主要是无害')#此分配将向路由发送请求,并将MH数据库设置为相同的#database mh.author = dna#这将强制强制'MH'实例使用主数据库... mh.save()#...但是,如果我们重新观察对象,我们将获得mh = mh = mh = book.objects.gets.get(title ='主要是无害')
手动选择数据库
Django还提供了一个API,可让您通过代码完全控制数据库。手动定义数据库分配优先。
为查询集选择数据库
您可以在查询集“链”中选择数据库。我们使用使用()在查询集中使用()使用()来获取指定数据库的另一个查询集。
使用()使用一个参数:您要运行查询的别名。例如:
#这将在“ default” database.author.objects.all()#上运行,这也将在“默认” database.author.objects.usings.using('default')上运行。all()#这将在“其他”数据库中运行。author.objects.using('其他')。全部 ()
选择一个数据库以保存()
在使用model.save()时添加使用的关键字以指定保存哪个数据库。
例如,将对象保存到legacy_users数据库:
my_object.save(使用='legacy_users')
如果您不使用使用定义,则根据路由分配,Save()方法将将数据保存到默认数据库中。
将一个对象从一个数据库移动到另一个数据库
将对象保存在数据库中后,您可以使用保存(使用= ...)将该对象移动到另一个数据库中。但是,如果您不使用适当的方法,则可能会产生意外的后果。
假设以下示例:
p = person(name ='fred')
首先,一个新人对象保存在第一个数据库中。这次,P没有主键,因此Django执行了插入SQL语句。这将创建一个主密钥并将此主键分配给P。
在第二个句子中,由于p已经有一个主键,django将在保存对象时尝试在新数据库中使用此主键。如果在第二个数据库中不使用此主密钥,则不会出现问题,并且没有问题,并且对象将被复制到新数据库。
但是,如果P的主要键已在第二个数据库中使用,则使用此主键的第二个现有对象将由P介绍。
有两种避免上述情况的方法。首先,您可以删除实例的主要键。如果对象没有主键,Django将将其视为新对象,并且在保存时不会导致数据丢失在第二个数据库中:
p = person(name ='fred')p.save(fusth ='first')p.pk = none#清除主键。
第二种方法是使用force_insert选项来确保Django执行插入SQL:
p = person(name ='fred')p.Save(used ='first')
这可以确保名为FRD的人在两个数据库中使用相同的主键。如果将主键保存到第二个数据库时占用,则会丢弃错误。
选择数据库删除数据
在默认情况下,获得了现有对象的哪个数据库,将在此数据库中执行此对象的删除:
u = user.objects.using('legacy_users')。获取(用户名='Fred')u.delete()#
通过将使用的关键字参数传递到model.delete()方法,您可以定义数据库中的数据。使用使用情况类似于save()方法中的此参数。
例如,假设我们将用户从lagacy_users数据库移动到new_users数据库以使用以下命令:
user_obj.save(user ='new_users')user_obj.delete(use ='lectacy_users'))
在许多数据库中使用经理
在管理器上使用db_manager()允许管理器访问非默认数据库。
例如,假设您有一个自定义的管理器user.objects.create_user()。
因为create_user()是一个管理方法,而不是查询集,所以你不能
使用user.objects.using('new_users')。create_user()。(create_user()方法
它只能用于user.objects经理,而不是用于从管理器派生的查询集。)解决方案是使用db_manager(),就像以下内容一样:
user.objects.db_manager('new_users')。创建用户 (...)
db_manager()返回绑定到您指定的数据库的管理器的副本。
在许多数据库中使用get_query_set()
如果在管理器中重新加载get_query_set(),请确保使用相同的方法(使用super())或正确处理管理器中的_db属性(您想在管理器中使用的数据库名称)。
例如,如果您从get_query_set方法返回自定义查询集类别,则可以执行此操作:
类Mymanager(models.manager):def get_query_set(self):qs = customqueryset(self.model),如果self._db none none:qs.using(seld._db)返回QS QS QS QS QS QS QS QS QS QS QS QS QS QS QS
在Django管理接口中使用多数据库
Django的管理接口显然不支持许多数据库。如果您想支持,则必须编写一个自定义的模型。
如果要支持数据库,则ModelAdmin对象具有五个要自定义的方法:
类MultidBmodelAdmin(admin.modeladmin):#方便定义数据库名称常数。usist='其他'def save_model(self,request,request,obj,obj,form,conse):#让django保存对象到'其他'数据库。obj.save(使用= self.using)def delete_model(self,request,obj):#让django从'其他''''database.obj.delete(used = self.ususe)def quryset(self,request)中删除对象:#让django在'其他'数据库中搜索对象。return super(multidbmodeladmin,self).quelySet(request).using(self.using)def form form form form form form formfield_for_foreignkey(self,db_field,request = none,none,** kwargs):########
默认属性仅在Django的ORM模型中有效,并且不会真正映射到数据库中。要设置数据表的默认属性,您可以手动修改Makemigrations生成的脚本或修改Django本身。
在db/backnds/creation.py中找到以下字段:以下字段:
如果f.primary_key:
field_output.append(style.sql_keyword('primary键'))elif f.unique:
field_output.append(style.sql_keyword('unique'))
添加后:
if(f.default!= models.fields.not_providers):
field_output.append(style.sql_keyword('default' + str(f.default)))
方法/步骤
修改设置中的数据库
数据库= {
'默认': {
'引擎':'django.db.backends.mysql',
“名称”:'书籍',#your数据库名称
“用户”:“ root”,#your数据库用户名
'密码':'',#your数据库密码
'主机':'',#your数据库主机,停留在localhost的简短默认值中
'端口':'3306',#your数据库端口
}
}
instasted_apps =((
“书籍”,#您的数据库名称
治愈
在MySQL中创建书籍数据库
检查是否有语法错误
使用python manage.py sqlall书籍显示mysql语法
在Python Manage.py同步同步模型中使用数据库
成功的创造!
我认为楼上的答案似乎有些问题。您可以验证我是否正确。
当查询GET时,当您无法查询内容时会引发异常,并且在结果过剩时会抛出异常。因此,不应使用过滤器,但应使用过滤器。
如果归档器找不到数据,它将返回一个空查询集,[]类型类型为:querySet。
当您发现额外的一个时,您将返回包含多个对象的查询集。
所有使用过滤器确定是否存在过滤器。
userInfo = user.objects.filter(email = request.post ['email'])
如果useinfo.exists():
打印(“是的,我们有这封电子邮件”)
别的:
打印(“对不起,电子邮件未注册”)
此外,您还可以使用count()方法。userInfo.count()= 0表示没有数据,如果您大于0,则有一个或多个部分。
楼上也有答案:如果urinfo:..................................................................
错误代码1045
访问用户'root'@'localhost'的访问被拒绝
(使用密码:是)
如果您的mysql也出现在上面,则此提示,
建议您一一阅读我的文章,并尝试根据以下方法解决问题。
这是MySQL数据库经常发生的问题。许多解决方案在互联网上流通。有些人确实可以根据这些方法解决问题。但是许多人无法根据这些方法解决问题!
这个中等原因是没有正确的药物!!!
Internet上的许多方法都没有明确指出MySQL的哪个版本,因此无法开出问题的问题。
如果发生此问题,可以通过停止/重新启动MySQL服务来解决。这是最简单的方法!对于那些不知道什么“停止/重新启动mysql服务”的人,
最简单的方法是重新启动服务器主机(即重新启动计算机)。
以上是方法a!(此方法适用于MySQL的任何版本)
以下是方法b :(方法仅适用于mysql4.0.26 !!!!(我估计,
4.0的其他版本也应该可用)))))))
有人在互联网上说,即更改root的密码。对于在Internet上循环的密码方法也是可行的。请参考以下内容:
修改DOS下的root密码:当然,如果您以后安装phpmyadmin,则可以修改密码并通过phpmyadmin进行修改
格式:mysqladmin -u用户名-P旧密码
新密码
示例:添加密码induecmblog扎根
首先输入CMD命令行,转移到MySQL目录中的BIN目录,然后键入以下命令
mysqladmin
-UROT密码Iduscmblog
注意:由于root在开始时没有密码,因此可以省略-P旧密码。
D:phpmysqlbinmysqladmin -uroot密码
返回汽车后,IdeaCMBlog设置为Idurecmblog
但是,请注意,以上方法仅适用于mySQL4.0.26
版本 !!!(我估计,其他版本的4.0也应该可以))))
方法C:
好的,如此多的酷刑,以上两种方法没有我自己测试,我对现实主义不承担任何责任!
现在,我将讨论我亲自尝试的方法:
顺便说一句,使用MySQL数据库的所有phps和网站都挂断了!无法打开它,
以及以下提示:
错误代码1045
访问被拒绝
用户'root'@'localhost'(使用密码:是)
一开始,我一直在寻找Google(我不喜欢Baidu!),),),
去寻找解决方案。看到很多东西后,我也参考了它。实际上,我无法解决问题。之后
解决方案不一定是一样的!记住 ...
我的mysql版本是:5.0.22
(MySQL- Essential-5.0.22-Win32)
整天,这些PHP网站罢工。我没有时间去服务器今晚寻找方法,但我仍然没有解决。
最后,我决定删除MySQL并重新安装它!
迅速卸载,无需重新启动计算机。
因此,继续安装。
第一步:
打开此MySQL -Essential-5.0.22-Win32.exe文件;
步骤2:查看窗口弹出,然后单击下一步
输入下一步;
步骤3:选择自定义项目,然后单击
接下来进入下一步;
步骤4:在此步骤中,请注意,请单击
更改...选择MySQL目录的原始安装;选择后,继续单击下一步输入下一步;
步骤5:单击安装
安装 ...
安装到下一步之前,您将提示您注册,选择最后一个,然后跳过注册,
输入下一步以正式完成安装。
安装完成后,继续弹出窗口以提示您立即配置它,
选择下一步
选择标准配置。
接下来进入下一步
在此步骤中,上述行被删除,仅包括
....路径线勾,继续单击下一步输入下一步
在此步骤中,单击中间的“ Ex ****”,
然后配置完成!
目前,您是否去看看您的MySQL是否正常?
!!
没关系!交叉路口
步骤1:
在您的django项目目录中修改settings.py文件,如下所示:
其中,“ db_name'对应于'name'
命令行提示符创建的数据库名称:注意:在Django使用数据库之前,您必须创建数据库,否则将报告错误。
还有与“密码”相对应的“ passwd”
这是您在MySQL中创建的用户名和密码。如果您有多个,只需随便填写一个。“ host”和“ port”默认情况下不能填写。
出色:使用用户名和密码登录到mySQL方法:
首先,您需要输入MySQL/bin目录,也可以在.bash_profile中设置环境变量:
路径=/usr/local/bin:/usr/bin:/bin:/sbin:/sbin:/usr/sbin:/usr/usr/local/sbin:/usr/local/mysql/5.6.22/bin/
在提示中输入MySQL -U用户名-P,然后在返回后输入PassWD。
第2步:
然后使用Python Manage.py SynCDB在Manage.py路径中尝试。结果将表明您找不到MySQLDB模块。为什么,因为python manage.py syncdb命令正常工作:
1.查找可能需要在项目目录中的stentaim_apps Metal of Attectings.py中续订的应用程序。
2.在每个应用程序目录中找到Models.py(关系定义文件),并更新数据库中的更改。
说了很多话,模块mysqldb在上一个错误中意味着什么?
首先给图片,然后解释:
因为Python用于定义模型中的关系。当然,必须在数据库中使用它来形成SQL语句,因此必须有一些功能模块。
来将Python语句转换为SQL语句。如果您使用SQLITE,因为SQLITE和转换模块已由Python构建,直接使用直接使用不会是错误的
错误。但是“ MySQL语句转换模块”需要您手动加载,这些模块放在MySQL-Python中。
我用pip安装了它:
安装后,请使用Python Manage.py SynCDB为正常。
我使用的系统是OS X,以下是MySQL默认安装路径
/USR/local/cellar/mysql/5.6.22/
如果您想知道数据库文件的放置位置,则可以在MySQL_Config文件中检查LDATA变量。该变量的值是默认数据库文件夹存储路径。在我的系统中,mysql_config的完整路径是:
/USR/local/cellar/mysql/5.6.22/bin/mysql_config
结论:以上是主要CTO的所有内容,请注意Django如何比较数据库密码。我希望这对每个人都会有所帮助。如果您仍然想了解有关此信息的更多信息,请记住收集并关注此网站。