必赢亚洲手机app下载


自个儿的思维变化366net必赢亚洲手机版

福寿绵绵录制在线播放

766net必赢亚洲手机版模型和数据库交互

为学日益。为道日损。损之又损,以至於无为。无为而不为。
——老子《道德经》

书接上文,我们三番七回

2. 数据库配置【MySQL】

平凡情状下,假诺你只是做测试使用,能够行使Django内置的数据库SQLite就全盘能够知足急需了,大家在这一次教程中,通过采用MySQL那个数据库来形成后续的服从操作

咱俩先是要做的是,在配备文件中钦赐数据库的配备,先简单领会一下

数据库配置,首先要安插相应的数据库引擎对象和数据库连接新闻
在DATABASES的default配置中展开暗中同意配置

  • ENGINE:数据库引擎配置,能够从django.db.backends.sqlite3django.db.backends.postgresqldjango.db.backends.mysql或者django.db.backends.oracle中甄选1个
  • NAME:数据库名称,也正是大家项目要连接的数据库名称,如果选拔默许的SQLite,数据库正是3个封存在大家电脑上的公文,NAME就必须钦定相对路径(当然那是废话,Django已经帮大家把那么些工作都做好了)
  • 与此同时仍可以运用USERPASSWORDHOST等等这一个陈设来陈设进一步详实的音讯

在意:就算在品种中选取的数据库不是暗中认可的SQLite,请确定保证您的数据库是存在的

废话不说,上干货
打开mysite/mysite/settings.py配备文件,添加数据库连接配置音讯

# 引入pymysql模块
import pymysql
# 指定按照mysqldb的方式使用
pymysql.install_as_MySQLdb()

# 修改DATABASES配置
DATABASES = {
    'default': {
        # 数据库连接字符串
        'ENGINE':"django.db.backends.mysql",
        # 数据库名称
        "NAME":"pydb",
        # 数据库登录账号
        "USER":"root",
        # 数据库登录密码
        "PASSWORD":"",
        # 数据库所在主机IP,本机可以不用填写
        "HOST":"",
        # 数据库连接端口,MySQL默认3306
        "PORT":"3306"
    }
}

那里要求专注,我们能够看到,在mysite/mysite/settings.py文件的初叶,引入了pymysql并且调用了它的不二法门install_as_MySQLdb()
这是因为Django常规景况下接纳的mysqldb模块来两次三番数据库,可是python3.4+的本子还尚无相应的mysqldb,近日采纳的是第3方的pymysql模块,所以那里开始展览了那般的改造。

骚年,期待你在动用到时候,官方能提供和Python3.6配套的mysqldb来实行数据库操作。可能你直接参加到法定的费用队容中,那就更健全了~

3. 创制模型应用并和数据库交互

3.1. 创办模型对象

正规状态下,大家必要在程序中,通过类和目的来封装大家的数据,方便数据的联合保管和平运动用,Django中对模型对象的标准做的愈来愈的联结了,平日情状下将模块应用对象会大规模在采纳的模块应用/models.py文件中

废话不说,直接上干货:
在我们mysite项目的polls运用中,创设模型对象

# 引入django.db模块中的models模块
from django.db import models

# 创建一个**问题**类型
class Question(models.Model):
    # 创建一个问题描述属性,指定为字符串类型,最大长度200个字符
    question_text = models.CharField(max_length = 200)
    # 创建一个发布时间属性,指定为日期时间类型
    pub_date = models.DateTimeField("date published")

# 创建一个**解决方案**类型
class Choice(models.Model):
    # 将解决方案和问题关联起来,通过外键的形式
    question = models.ForeignKey(Question, on_delete=models.CASCADE)
    # 解决方案的描述信息,字符串,最大长度200
    choice_text = models.CharField(max_length=200)
    # 解决方案的投票总数,整数类型,默认0
    votes = models.IntegerField(default = 0)
3.2. 管理模型对象

若果创制好了笔者们的模子类型,须求在品种中利用那些模型和数据库中的数据开始展览交互,首先大家要做的是~将我们模块应用polls纳入到项目管理中

很神奇的一句话:“纳入到品种管理中”,难道此前就木有在项目管理中吗?那大家是在开行项目后怎么访问到polls引用的视图的啊?!

换一句话我们可能就清楚了,你作为中国的超级良民,国家庭财产政会给你发补贴福利啊?不会!不过一旦把您纳入到国家的编制中,你就能够大快朵颐国家庭财产政给您发放的工钱补贴福利等等能源了,那里也是如出一辙,前面创造的polls利用只是连串中的一部分,我们唯有通过类似编写制定的东东让项目mysitepolls累加3个编辑,项目就足以处理模块应用polls/中的模型数据了

在大家项目中,通过项目标mysite/mysite/settings.py布署文件的INSTALLED_APPS慎选来展开项目利用的治本
暗许情形下mysite/mysite/settings.py安排音讯如下

INSTALLED_APPS = [
    'django.contrib.admin',# 默认提供的后台管理网站
    'django.contrib.auth',# 权限认证模块
    'django.contrib.contenttypes',#内容编码框架模块
    'django.contrib.sessions',# session回话管理框架模块
    'django.contrib.messages',# 消息队列处理模块
    'django.contrib.staticfiles',# 项目静态文件管理模块
]

小编们要做的是怎么啊,打开模块应用polls/app.py应用描述文件,可以阅览里面定义了模块应用的称号,对,说的就是它!!!!

from django.apps import AppConfig
# 模块应用的名称
class PollsConfig(AppConfig):
    name = 'polls'

作者们修改mysite/mysite/settings.py布局文件,添加模块应用

INSTALLED_APPS = [
    'polls.apps.PollsConfig',
    'django.contrib.admin',# 默认提供的后台管理网站
    'django.contrib.auth',# 权限认证模块
    'django.contrib.contenttypes',#内容编码框架模块
    'django.contrib.sessions',# session回话管理框架模块
    'django.contrib.messages',# 消息队列处理模块
    'django.contrib.staticfiles',# 项目静态文件管理模块
]

至此~配置部分就完全OK啦

3.3. 运用模型对象

地点项目部分支付配置达成后,大家Django能做什么样啊?

  • 自行创造模块应用中模型对应的数据表(Create Table
    <table_name>)
  • 自动生成访问Question和Choice模型对象的API接口

诸如此类神奇?上干货:
履行如下命令,举行数据库同步:

python3 manage.py makemigrations polls

施行的结果你会看出:

766net必赢亚洲手机版 1

makemigrations执行结果

运行makemigrations一声令下,正是告诉Django大家对点名的模子,如polls,实行了哪些改观,并将那些改动音信囤积起来

migrations会将那一个改动音信保存在模块应用的migraions文件夹下,如上边的操作会生成那样2个文书:mysite/polls/migrations/0001_initial.py,打开直接就足以旁观实际的叙述音讯了。

咱俩再填一把火,查看Django自动给咱们成立的SQL语句吧

# 执行sqlmigrate命令得到刚才执行makemigrations命令生成的sql语句
python3 manage.py sqlmigrate polls 0001

实践结果如下:

D:\resp_work\PY_WORK\mysite>python3 manage.py sqlmigrate polls 0001
BEGIN;
--
-- Create model Choice
--
CREATE TABLE `polls_choice` (
`id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
`choice_text` varchar(200) NOT NULL,
`votes` integer NOT NULL);
--
-- Create model Question
--
CREATE TABLE `polls_question` (
`id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
`question_text` varchar(200) NOT NULL,
`pub_date` datetime(6) NOT NULL);
--
-- Add field question to choice
--
ALTER TABLE `polls_choice` ADD COLUMN `question_id` integer NOT NULL;

ALTER TABLE `polls_choice`
ADD CONSTRAINT `polls_choice_question_id_c5b4b260_fk_polls_question_id`
FOREIGN KEY (`question_id`) REFERENCES `polls_question` (`id`);

COMMIT;

我们会看到1个很神奇的结果,我们创造的Question和Choice模型数据,被Django自动转换来了SQL语句了

在意难点:由migrations引发的猜测

  • 由makemigrations根据模型自动生成的sql语句,严重重视内定的数据库,难忘那样的SQL不是通用的,那里生成的SQL语句只可以用来MySQL数据库
  • 主键是自行拉长的(当然你也足以修改不让自动增进),并且会依据钦命的数据库自动匹配,如auto_increment(MySQL)serial(PostgreSQL)integer primary key autoincrement(SQLite)等等
  • 暗中认可情状下Django会自动给外键扩展_id的款式命名(同样能够修改哦)
  • 最重要的是:makemigrations或者sqlmigrate一声令下,都不会在对象数据库自动执行,也正是SQL语句有了,可是还并未履行。那是干吗吧?因为毕竟自动的东西不必然满意急需~我们简要修改一下SQL然后实施,那样特别符合实际开发哦
  • 766net必赢亚洲手机版,本来,假使不须要修改SQL,直接实施的话,运转python3 manage.py migrate指令就足以将转移应用到数据库了
3.4. 选用模型对象的API操作

在命令行通过shell启航应用,就能够直接进行python依据模型应用提供的API接口的拜访测试了
举办如下命令:

python3 manage.py shell

就足以在指令行中,举行API的测试了

D:\resp_work\PY_WORK\mysite>python3 manage.py shell
Python 3.6.1 (v3.6.1:69c0db5, Mar 21 2017, 18:41:36) [MSC v.1900 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> Question.objects.all()
Traceback (most recent call last):
  File "<console>", line 1, in <module>
NameError: name 'Question' is not defined
>>>
>>> from polls.models import Question, Choice
>>> Question.objects.all()# 查看所有的问题对象列表
<QuerySet []>
>>>
>>> from django.utils import timezone # 引入时区模块
>>> q = Question(question_text="What's new?", pub_date=timezone.now())# 创建一个问题对象
>>> q.save() # 保存到数据库
>>> q.id # 查看q对象的主键字段
1
>>> q.question_text# 查看q对象的问题描述字段
"What's new?"
>>> q.pub_date # 查看q对象的发布时间字段
datetime.datetime(2017, 6, 9, 2, 59, 43, 68178, tzinfo=<UTC>)
>>>
>>> q.question_text="What's up?" # 修改q对象的question_text属性值
>>> q.save()# 保存
>>>
>>> Question.objects.all() #查看所有的问题对象列表
<QuerySet [<Question: Question object>]>
>>>

未完待续:5.3. 后台管理连串


766net必赢亚洲手机版 2

Django来敲门

相关文章

No Comments, Be The First!
近期评论
    功能
    网站地图xml地图