数据库不能分离 *** 作的是

数据库不能分离 *** 作的是,第1张

数据库不能分离 *** 作的是model数据库。数据库能进行分离 *** 作的有:MyDB数据库、Test数据库、AdventureWork数据库。该数据库正在某个数据库镜像会话中进行镜像。除非终止该会话,否则无法分离该数据库。

Model是django项目的基础,如果一开始没有好好设计好,那么在接下来的开发过程中就会遇到的问题然而,大多数的开发人员都容易在缺少思考的情况下随意的增加或修改model这样做的后果就是,在接下来的开发过程中,我们不得不做出努力来修正这些错误因此,在修改model时,一定尽可能的经过充分的考虑再行动!以下列出的是我们经常用到的一些工具和技巧:South,用于数据迁移,我们会在每个django项目中都用到但到django17时,将会有djangodbmigrations代替django-model-utils,用于处理常见的模式,例如TimeStampedModeldjango-extensions,主要用到shell_plus命令,该命令会在shell中自动载入所有的app的model1基本原则第一,将model分布于不同的app中如果你的django项目中,有一个app拥有超过20个model,那么,你就应当考虑分拆该app了我们推荐每个app拥有不超过5个model第二,尽量使用ORM我们需要的大多数数据库索引都能通过Object-Relational-Model实现,且ORM带给我们许多快捷方式,例如生成SQL语句,读取/更新数据库时的安全验证因此,如果能使用简单的ORM语句完成的,应当尽量使用ORM只有当纯SQL语句极大地简化了ORM语句时,才使用纯SQL语句并且,在写纯SQL语句是,应当优先考虑使用raw(),再是extra()第三,必要时添加index添加db_index=True到model中非常简单,但难的是理解何时应该添加在建立model时,我们事先不会添加index,只有当以下情况时,才会考虑添加index:在所有的数据库查询中使用率在10%-25%时或当有真实的数据,或能正确估计出使用index后的效果确实满意时第四,注意model的继承model的继承在django中需要十分小心,django提供了三种继承方式,1abstractbaseclass继承(不要和Pyhton标准库的abc模块搞混),2多表(multi-table)继承,3proxymodel继承下表罗列了这三种继承的优劣:model继承类型优势劣势不使用继承,即每个相同的field会重复出现在不同的model中容易明白model和数据表的关系如果有大量相同的field,会较难维护abstractbaseclass继承,即只有继承自该类的model才会有数据表,其自身没有对应的数据表不用在每个model重复编写相同的field也没有多表继承带来的过多消耗无法单独使用其共同的abstractbaseclass多表(multi-table)继承每个model都有数据表,因此可以既使用母表,又使用子表也能通过parentchild从母表访问子表增加了消耗,因为每次查询子表,都会自动查询其母表强烈建议不使用这一方法!proxymodel继承,即只有原始model才会有相应的数据表在不建立新数据表的情况下,使我们拥有不同行为的model无法修改model的fielddjango的创造者和其他许多开发人员都认为,多表继承的方法不是一个良好的方法因此我们强烈建议大家不要使用该方法下面列举了一些常见的如何选择model继承的情形:如果只有少数model拥有重复的field时,大可不必使用model继承,只需要在每个model中添加这些相同的field即可如果有足够的model拥有重复的field时,大多是情况下,可以使用abstractbaseclass继承,将相同的field提取到abstractbaseclass中Proxymodel继承很少被用到,和其他两种继承也有着许多不一样之处请不要使用多表(multi-table)继承,因为它既消耗资源又复杂,如果可以,尽量使用OneToOneFields和ForeignKeys代替django项目中,创建时间和修改时间这两个field是最用到的,下面给出一个abstractbaseclass继承的例子:#modelspyfromdjangodbimportmodelsclassTimeStampedModel(modelsModel):"""abstractbaseclass,提供创建时间和修改时间两个通用的field"""created=modelsDateTimeField(auto_now_add=True)modified=modelsDateTimeField(auto_now=True)classMeta:abstract=True注意以上代码的最后两行,正式这两行将这一model变味了abstractbaseclass,下面以TimeStampedModel为abstractbaseclass建立model:fromdjangodbimportmodelsclassArticle(TimeStampedModel):title=modelsCharField(max_length=200)以上两个class,在执行syncdb时,只会建立一个数据表,这也正是我们希望得到的第五,使用south进行数据迁移,可以参见以前的文章:如何在Django中使用django-south,实现数据迁移(datamigrations)2DjangoModel的设计如何设计出好的djangomodel可能是最难也是最复杂的一个话题了,在此,我们看看一些基本的技巧吧:a规范化我们首先建议了解数据库规范化(databasenormalization)如果你还不清楚这是什么,那么,我们强烈建议你先阅读一下相关的书籍,或搜索"关系型数据库设计"或"数据库规范化"在创建djangomodel之前,应当首先保证设计的数据库是规范化的bcache正确的使用cache能帮助我们提高数据库的性能详细的信息,我们会在今后的文章中作进一步介绍c何时使用null和blank当定义modelfield时,我们可以设置null=True和blank=True(默认都是False),知道何时设置null和blank对于开发人员也是十分重要的,在下面的表格中,我们一一列举了如何使用这两个选项:Field类型设置null=True设置blank=TrueCharField,TextField,SlugField,EmailField,CommaSeparatedIntegerField等不要设置django规定储存空字符串来代表空值,当从数据库中读取NULL或空值时都为空字符串可以设置设置后允许接受widget中为空值(即不填写),储存到数据库时空值变为空字符串FileField,ImageField不要设置django实际储存的是路径的字符串,因此同上可以设置同上BooleanField不要设置因为有NullBooleanField代替不要设置IntegerField,FloatField,DecimalField等可以设置如果你希望在数据库中能储存NULL可以设置设置后允许接受widget中为空值(即不填写),设置为True时必须同时设置null=TrueDateTimeField,DateField,TimeField等可以设置如果你希望在数据库中能储存NULL可以设置设置后允许接受widget中为空值(即不填写),设置为True时必须同时设置null=TrueForeignKey,ManyToManyField,OneToOneField可以设置如果你希望在数据库中能储存NULL可以设置设置后允许接受widget中为空值(即不填写)GenericIPAddressField可以设置如果你希望在数据库中能储存NULL可以设置设置后允许接受widget中为空值(即不填写)IPAddressField不推荐设置用GenericIPAddressField代替不推荐设置用GenericIPAddressField代替d什么时候使用BinaryField在django16中,新增了BinaryField,用于储存二进制数据(binarydata或bytes)对于BinaryField,我们无法使用ORM的filters,excludes或其他SQL *** 作但在少数情况下,我们会用到BinaryField,例如MessagePack格式的内容,传感器接受的原始数据和压缩数据等但需要注意的是,BinaryData一般都十分庞大,因此可能会拖慢数据库的速度如果发生这一现象,我们可以将binarydata储存在文件中,然后使用FileField储存该文件的路径信息还有,不要从BinaryField中直接读取文件并呈献给用户因为,1从数据库读写总是比从文件系统读写慢;2数据库备份会变得十分庞大,花费的时间;3获得文件的过程,增加了从django到数据库的这一环节3不要替换默认的ModelManager从ORM获取model,实际上是通过django中的Modelmanager完成的,django为每一个model提供了默认的modelmanager,我们不建议将其替换掉,因为:当使用model继承时,model会继承abstractbaseclassmodel的modelmanager,而不会继承非abstractbaseclass的managermodel的第一个modelmanager通常作为默认的manager,当被替换时,可能会发生不可预测的问题4数据库事务(Transaction)在django16中,ORM默认会autocommit每一个数据库查询,也就是说,每次使用mcreate()或mupdate()时,在数据库中马上就会做出相应的修改这样做的好处就是简化了初学者对ORM的理解但坏处就是,当一个view中包含两个数据库修改,可能一个成功,但另一个失败,这就可能导致数据库不完整,给我们带来很大的危险解决这一问题的方法就是使用数据库transaction,即将一系列数据库 *** 作包含在一个transaction中,当其中有一个失败时,其他 *** 作也会自动回退Django16为我们带来了一套崭新的既简单又强大的transaction机制,使我们方便的使用数据库transactiona将整个>

这个是不用必须的,可以任意命名。只是在tp里面

如果你的model命名是用数据表名字命名的话, *** 作的时候直接相当 *** 作这个表。自己命名的model,自己需要指定下自己 *** 作的表名就OK啦,不是必须的

。多看看官方手册,还是挺不错的

1、选择开始菜单中→程序→Management SQLServer 2008→SQL ServerManagement Studio命令,打开SQL Server Management Studio窗口,并使用Windows或 SQL Server身份验证建立连接。

2、在对象资源管理器窗口中展开服务器,然后选择数据库节点

3、右键单击数据库节点,从d出来的快捷菜单中选择新建数据库命令。

4、执行上述 *** 作后,会d出新建数据库对话框。在对话框、左侧有3个选项,分别是常规、选项和文件组。完成这三个选项中的设置会后,就完成了数据库的创建工作

5、在数据库名称文本框中输入要新建数据库的名称。例如,这里以“新建的数据库”。

6、在所有者文本框中输入新建数据库的所有者,如sa。根据数据库的使用情况,选择启用或者禁用使用全文索引复选框。

7、在数据库文件列表中包括两行,一行是数据库文件,而另一行是日记文件。通过单击下面的添加、删除按钮添加或删除数据库文件。

8、切换到选项页、在这里可以设置数据库的排序规则、恢复模式、兼容级别和其他属性。

9、切换到文件组页,在这里可以添加或删除文件组。

10、完成以上 *** 作后,单击确定按钮关闭新建数据库对话框。至此“新建的数据”数据库创建成功。新建的数据库可以再对象资源管理器窗口看到。

--另外,可以使用SQL语句创建数据库

     

CREATE DATABASE 数据库名称

 

以上就是关于数据库不能分离 *** 作的是全部的内容,包括:数据库不能分离 *** 作的是、MVC 模型里如何设置默认值,比如 CreateDate设置成 获取当前时间,迁移到数据库里就是Getdate()、thinkphp model 必须对应数据库表名等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/9753466.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-01
下一篇2023-05-01

发表评论

登录后才能评论

评论列表(0条)

    保存