如何独立使用django的数据库访问功能

如何独立使用django的数据库访问功能,第1张

1 安装Django

[plain] view plain copy

cd Django-14

python setuppy install

2 安装postgresql的客户端:

[plain] view plain copy

sudo apt-get install -y postgresql-client-91 python-psycopg2

3 新建project:

[plain] view plain copy

django-adminpy startproject myproject

4 在myproject下新建app:

[plain] view plain copy

python managepy startapp myapp

4 新增环境变量:

编辑/etc/profile文件,在末尾加入以下语句

[plain] view plain copy

<span style="color:#FF0000;"> export PYTHONPATH=$PYTHONPATH:/home/yc/src/myproject

export DJANGO_SETTINGS_MODULE=myprojectsettings</span>

5

假设数据库已经由Django的另一个应用(名称为otherapp)建好,数据库类型是postgresql,名称为mydb,位于

192168123。见好的数据库中有一个表,名称是otherapp_user,则将otherapp/modelspy拷贝到myapp

/modelspy。

注意检查modelspy下的class user类的class Meta:部分,如果没有applabel标签,则要加上:app_label='otherapp'

再修改/home/yc/src/myproject下的settingspy文件,如下:

[plain] view plain copy

DATABASES = {

'default': {

'ENGINE': 'djangodbbackendspostgresql_psycopg2', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'

'NAME': 'mydb', # 'vps2db_test1' Or path to database file if using sqlite3

'USER': 'postgres', # Not used with sqlite3

'PASSWORD': '123', # Not used with sqlite3

'HOST': '192168123', # Set to empty string for localhost Not used with sqlite3

'PORT': '5432', # Set to empty string for default Not used with sqlite3

}

}

[plain] view plain copy

INSTALLED_APPS = (

'djangocontribauth',

'djangocontribcontenttypes',

'djangocontribsessions',

'djangocontribsites',

'djangocontribmessages',

'djangocontribstaticfiles',

'<span style="color:#FF0000;">myapp</span>',

)

6 在myapp目录下编写测试程序

[python] view plain copy

from models import user

if __name__=="__main__":

try:

u = userobjectsget(id=user_id)

except userDoesNotExist:

print "user not exist)

return None

else:

return u

Model是django项目的基础, 如果一开始没有好好设计好, 那么在接下来的开发过程中就会遇到更多的问题 然而, 大多数的开发人员都容易在缺少思考 的情况下随意的增加或修改model 这样做的后果就是, 在接下来的开发过程中, 我们不得不做出更多努力来修正这些错误

因此, 在修改model时, 一定尽可能的经过充分的考虑再行动! 以下列出的是我们经常用到的一些工具和技巧:

South, 用于数据迁移, 我们会在每个django项目中都用到 但到django 17时, 将会有djangodbmigrations代替

django-model-utils, 用于处理常见的模式, 例如TimeStampedModel

django-extensions, 主要用到shell_plus命令, 该命令会在shell中自动载入所有的app的model

1 基本原则

第一, 将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提供了三种继承方式, 1abstract base class继承(不要和Pyhton标准库的abc模块 搞混), 2多表(multi-table)继承, 3proxy model继承 下表罗列了这三种继承的优劣:

django的创造者和其他许多开发人员都认为, 多表继承的方法不是一个良好的方法 因此我们强烈建议大家不要使用该方法 下面列举了一些常见的如何 选择model继承的情形:

如果只有少数model拥有重复的field时, 大可不必使用model继承, 只需要在每个model中添加这些相同的field即可

如果有足够的model拥有重复的field时, 大多是情况下, 可以使用abstract base class继承, 将相同的field提取到abstract base class 中

Proxy model继承很少被用到, 和其他两种继承也有着许多不一样之处

请不要使用多表(multi-table)继承, 因为它既消耗资源又复杂, 如果可以, 尽量使用OneToOneFields和ForeignKeys代替

django项目中, 创建时间和修改时间这两个field是最用到的, 下面给出一个abstract base class继承的例子:

2 Django Model的设计

如何设计出好的django model可能是最难也是最复杂的一个话题了, 在此, 我们看看一些基本的技巧吧:

a 规范化

我们首先建议了解数据库规范化(database normalization) 如果你还不清楚这是什么, 那么, 我们强烈建议你先阅读一下相关的书籍, 或搜索"关系 型数据库设计"或"数据库规范化" 在创建django model之前, 应当首先保证设计的数据库是规范化的

b cache

正确的使用cache能帮助我们提高数据库的性能 详细的信息, 我们会在今后的文章中作进一步介绍

c 何时使用null和blank

当定义model field时, 我们可以设置null=True和blank=True (默认都是False), 知道何时设置null和blank对于开发人员也是十分重要的, 在下 面的表格中, 我们一一列举了如何使用这两个选项:

d 什么时候使用BinaryField

在django 16中, 新增了BinaryField, 用于储存二进制数据(binary data或 bytes) 对于BinaryField, 我们无法使用ORM的filters, excludes或其他SQL *** 作 但在少数情况下, 我们会用到BinaryField, 例如MessagePack格式的内容, 传感器接受的原始数据和压缩数据等 但需要注意 的是, Binary Data一般都十分庞大, 因此可能会拖慢数据库的速度 如果发生这一现象, 我们可以将binary data储存在文件中, 然后使用FileField储 存该文件的路径信息

还有, 不要从BinaryField中直接读取文件并呈献给用户 因为, 1 从数据库读写总是比从文件系统读写慢; 2 数据库备份会变得十分庞大, 花费更多 的时间; 3 获得文件的过程, 增加了从django到数据库的这一环节

3 不要替换默认的Model Manager

从ORM获取model, 实际上是通过django中的Model manager完成的, django为每一个model提供了默认的model manager, 我们不建议将其替换掉, 因为:

当使用model继承时, model会继承 abstract base class model的model manager, 而不会继承非abstract base class的manager

model的第一个model manager通常作为默认的manager, 当被替换时, 可能会发生不可预测的问题

4 数据库事务 (Transaction)

在django 16中, ORM默认会autocommit每一个数据库查询, 也就是说, 每次使用mcreate()或mupdate()时, 在数据库中马上就会做出相应的修 改 这样做的好处就是简化了初学者对ORM的理解 但坏处就是, 当一个view中包含两个数据库修改, 可能一个成功, 但另一个失败, 这就可能导致数据库不 完整, 给我们带来很大的危险

解决这一问题的方法就是使用数据库transaction, 即将一系列数据库 *** 作包含在一个transaction中, 当其中有一个失败时, 其他 *** 作也会自动回退 Django 16 为我们带来了一套崭新的既简单又强大的transaction机制, 使我们方便的使用数据库transaction

a 将整个>

你这个问题描述,着实有点让人费解。感觉你对这方面了解不深,所以一般像你这样的问题很少会有人回答,因为回答之后,你会有更多的疑问,甚至是一直问下去。

在学习的过程中,你要学会自己去搜索解决

Django。如果你看过官方文档的话,查询数据并把列表传到前台。肯定没问题,很简单的几行代码。如果你不会,那就去查看相应版本的django文档。

jquery ajax请求。看下面的示例代码

//这是一个ajax异步请求,使用post方法

$ajax({type: "POST",

        url: "/message/",

        data: {

        telnum: $("#telnum")val(),

        ordernum: $("#ordernum")val(),

        mesgchannel: $("#mesgchannel")val(),

        mesglevel: $("#mesglevel")val(),

        starttime: $("#datepicker1")val(),

        endtime: $("#datepicker2")val()

        },

        success: function(response){

        $('#result')html(response);

        }

});

//下面这个是异步请求成功之后,用于接收数据的html标签

<div>

  <div id="result" class="alert"></div>

</div>

以上就是关于如何独立使用django的数据库访问功能全部的内容,包括:如何独立使用django的数据库访问功能、Django 中使用model 怎么查询不等于某个值的情况、Django 前台与后台交互问题实现点击按钮后 后台查询数据库 并把列表传到前台 ,如果使用jqu等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

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

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

发表评论

登录后才能评论

评论列表(0条)

    保存