definitions
很多同学在进行编程学习时缺乏系统学习的资料。本页面基于definitions内容,从基础理论到综合实战,通过实用的知识类文章,标准的编程教程,丰富的视频课程,为您在definitions相关知识领域提供全面立体的资料补充。同时还包含 damain、dart、dataset 的知识内容,欢迎查阅!
definitions相关知识
-
事务前沿研究 | 隔离级别的追溯与究明,带你读懂 TiDB 的隔离级别(下篇)绪论 在上篇,我们分析了 ANSI SQL-92 和「A Critique of ANSI SQL Isolation Levels」对隔离级别做出的定义,并且指出了在现今的认知中,其中的一些缺陷。本篇将继续讨论隔离级别的问题,讲述实现无关的隔离级别定义和 TiDB 的表现和隔离级别。 Generalized Isolation Level Definitions 介绍 上文所讲的「A Critique of ANSI SQL Isolation Levels」这篇文章在定义隔离级别的时候,对事务的过程也提出了诸多的要求,然而「Generalized Isolation Level Definitions
-
Oracle 系统表Below is an alphabetical listing of the Oracle system tables that are commonly used. System TableDescriptionALL_ARGUMENTSArguments in object accessible to the userALL_CATALOGAll tables, views, synonyms, sequences accessible to the userALL_COL_COMMENTSComments on columns of accessible tables and viewsALL_CONSTRAINTSConstraint definitions on accessible tablesALL_CONS_COLUMNSInformation about accessible columns in constraint definitionsALL_DB_LIN
-
Spring 源码解读第七弹!bean 标签的解析1.前文回顾 不知道小伙伴们是否还记得,在前面我们讲 Spring 文档加载的时候,涉及到如下一段源码: protected int doLoadBeanDefinitions(InputSource inputSource, Resource resource) throws BeanDefinitionStoreException { try { Document doc = doLoadDocument(inputSource, resource); int count = registerBeanDefinitions(doc, resource); if (logger.isDebugEnabled()) { logger.debug("Loaded " + count + " bean definitions from " + resou
-
MySQL 触发器实现Summary: in this tutorial, you will learn about MySQL triggers implementation. In addition, we will show you how MySQL stores trigger definitions and the limitations of triggers in MySQL.Introduction to MySQL triggersIn MySQL, a trigger is a set of SQL statements that is invoked automatically when a change is made to the data on the associated table. A trigger can be defined to be invoked either before or after the data is changed by INSERT,
definitions相关课程
definitions相关教程
- 3.2 Overview 模块 Overview 模块是 RabbitMQ 消息管控台的总体概览模块,在本模块中,会看到当前 Connection 、Channel 、Queue 的状态,Overview 模块分为六部分,如下图所示:接下来让我们先来看 Totals 和 Nodes 部分内容:在 Totals 部分中,是一些监控的曲线,其中,Queued messages 表示消息队列的状态;Currently idle Message rates 表示当前监控频率下,消息的速率,单位为秒;Global counts 则表示当前 RabbitMQ Server 中各组成元素的个数,它们分别是 Connections、 Channels、 Exchanges、 Queues、 Consumers ,默认的 Exchanges 数量为 7 个。在 Currently idle Message rates 部分,分别设置了 Publish、Publisher Confirm、Unroutable(return)、Unroutable(drop) 这些关键的属性指标,其中 Publish 表示已发送的消息;Publisher Confirm 表示已经发布确认了的消息;Unroutable(return) 表示消息未被接收,且已返回重新发送的消息;Unroutable(drop) 表示消息未被接收,且已经删除了的消息。Nodes 部分则是表示 RabbitMQ Server 所在的当前节点与 RabbitMQ Server 相关的性能指标,这里有几个重要的性能指标,我们来看一下。Name ,即当前 RabbitMQ Server 所在节点的节点名称。Erlang processes ,即当前所在节点中,Erlang 语言支持库的线程数量。Memory ,即当前所在节点中 RabbitMQ Server 所占的内存容量,单位为 MB 。Disk space ,即当前所在节点的磁盘容量大小,单位为 GB 。Uptime ,即当前节点中 RabbitMQ Server 服务的运行时长。接着,让我们来看一下 Churn statistics 部分内容:该部分有三个图标,由上到下分别表示 Connection 、Channel 、Queue 的状态曲线,而这些状态缺陷只是用来描述已经创建的和已经关闭的 Connection 、Channel 、Queue 的数量。最后,让我们来看剩余的最后三部分内容,他们分别是 Ports and contexts 、Export Definitions 、Import Definitions ,如下图所示:在 Ports and contexts 部分,有 Listening ports 和 Web contexts 部分组成,在 Listening ports 中,展示了当前存在的协议名称,以及协议所绑定的端口号;在 Web contexts 中,就是我们的 RabbitMQ 消息管控台的名称(Context),以及绑定的地址(Bound to)、端口(Port)和路径信息(Path)了。在 Export Definitions 、Import Definitions 部分,分别表示将当前消息管控台的监控数据进行导出和导入,导出监控数据是通过下载完成,也就是 Download broker definitions ;导入监控数据是通过上传文件完成,也就是 Upload broker definitions 。Tips: Overview 模块是在实际工作中,使用最频繁的模块,所以需要各位同学要彻底搞清楚 Overview 模块中,每个关键属性所表达的含义,这样我们才能更清楚地读懂 RabbitMQ 的监控信息。
- 2.2 第二步:配置 Swagger Codegen 我们知道,Swagger Codegen 主要的作用,就是生成服务端和客户端的完整代码文件,所以,在将 Swagger Codegen 集成到 Spring Boot 中后,我们首先需要做的就是,对生成服务端和客户端的代码进行规则配置,即我们都需要生成什么样的服务端和客户端代码。配置服务端和客户端的代码生成规则叫繁琐,所以我们选择常用的几个属性来进行演示。配置服务端代码生成规则在 Swagger Codegen 中,配置服务端的代码生成规则,需要用到 yml 配置源文件,所以需要对 yml 配置源的语法有一定了解和掌握,有不清楚的同学请自行查阅相关资料。swagger: '2.0'info: title: IMooc Swagger-Wiki API description: Swagger-Wiki API version: 1.0.0paths: /imooct/wiki/swagger: get: tags: - wiki operationId: getImoocLesson parameters: - name: range in: query type: string required: true - name: lessonName in: query type: string required: true - name: lessonType in: query type: string responses: '200': description: OK schema: $ref: '#/definitions/GetImoocLessonResponse' default: description: default schema: $ref: '#/definitions/ErrorResponse'对于以上所使用的属性我们会在本节的后半部分进行详细介绍,这里大家可以先做简单的了解即可。配置客户端代码生成规则在 Swagger Codegen 中,客户端的代码规则是通过 json 文件来进行配置的,json 相信大家都很熟悉,这里就不再做相关介绍了。{ "apiPackage": "com.imooc.wiki.swagger.api", "artifactId": "cmp-imooc-steafan-service", "basePackage": "com.steafan.imooc.server", "configPackage": "com.steafan.imooc.server.config", "dateLibrary": "java8", "delegatePattern": true, "groupId": "com.steafan.imooc", "hideGenerationTimestamp": true, "java8": true, "language": "spring-boot", "modelPackage": "com.imooc.wiki.swagger.api"}代码解释:basePackage : 用于声明 Swagger Codegen 在生成代码时所扫描的路径。configPackage : 用于声明 Swagger Codegen 在生成代码时配置文件所在的目录。dateLibrary : 用于声明 Swagger Codegen 在生成代码时所用的语言。language : 用于声明 Swagger Codegen 在生成代码时所用的框架语言描述。modelPackage :用于声明 Swagger Codegen 在生成代码时项目中实体所在目录。完成上述配置之后,我们就可以使用 Swagger Codegen 来生成服务端和客户端代码。
- 3.1 Swagger Codegen 快速入门 服务端我们针对以上服务端配置的规则来介绍一下在 Swagger Codegen 服务端中经常使用的一些属性,同学在了解了这些属性之后就可以使用 Swagger Codegen 进行一些服务端代码的生成工作了。swagger: '2.0' info: title: IMooc Swagger-Wiki API description: Swagger-Wiki API version: 1.0.0 paths: /imooct/wiki/swagger: get: tags: - wiki operationId: getImoocLesson parameters: - name: range in: query type: string required: true responses: '200': description: OK schema: $ref: '#/definitions/GetImoocLessonResponse'代码解释:swagger : 指名生成的服务端代码所使用的 Swagger 管理版本,这里只能写 2.0 。info : 表示 Swagger Codegen 所生成的服务端代码的一些基本描述信息,上述包括 title (头信息) 、 description (文档描述) 、 version (文档版本)。paths : 表示具体一个接口的路径信息。get : 表示该接口的 http 请求类型,get 即为 Get 请求,同理 post 即为 Post 请求,以此类推。tags : 表示该接口所属的分组。operationId : 表示该接口的名称。parameters : 表示该接口中的参数信息,上述包括 name (参数名称) 、 in (参数用途) 、type (参数类型) 、 required (参数是否必传,true 表示参数必传,默认为 false )。responses : 表示该接口的返回信息,这里的 200 表示接口返回状态码,description 代表当接口返回状态码为 200 时的状态码描述信息,schema 中的 ref 属性统一表示当该接口返回 200 时重定向的地址或接下来要发生的动作。客户端针对 Swagger Codegen 中客户端代码的配置,在前面已经做了一些较为详细的介绍了,这里我就常用的客户端配置代码给上述内容做一个补充,同学们需要结合着来了解。{ "apiPackage": "com.imooc.wiki.swagger.api", "artifactId": "cmp-imooc-steafan-service", "groupId": "com.steafan.imooc", "hideGenerationTimestamp": true,}代码解释:apiPackage : 表示需要生成的客户端代码的包位置。artifactId 、 groupId : 类似于 Maven 中的依赖坐标,这里表示所生成的客户端代码的坐标信息。hideGenerationTimestamp : 表示在生成客户端代码之后会隐藏生成代码的时间,这个配置可有可无。
- 2.2 第二步:配置 Swagger Editor 源文件 在集成 Swagger Editor 到 SpringBoot 中时,为什么我们需要将 SpringBoot 项目的配置文件 applicaiton.properties 来修改成 YAML 配置源文件呢 ?这是因为我们的 Swagger Editor 只支持以 .yml 文件格式结尾的配置文件来编写 Swagger Editor ,这也是我一再强调 YAML 配置源文件的原因。在修改好配置源文件之后,接下来我们需要编写配置源文件,并且在编写完配置源文件之后,我们需要将该配置源文件进行重命名,重命名的规则一般都是项目名称 + Swagger Editor + 配置源文件版本号。简易配置 Swagger Editor 源文件Swagger Editor 的配置源文件我们在 Spring Boot 集成 Swagger Codegen 小节中做了简短的介绍:就是我们在配置 Swagger Codegen 服务端代码生成规则那里的服务端代码其实就是 Swagger Editor 配置源文件的一部分,也就是说Swagger Codegen 服务端的代码生成规则是通过 Swagger Editor 配置源文件来实现的。所以,在掌握了 Swagger Editor 的基本语法和使用技巧之后,我们就可以在编写好 Swagger Editor 配置源文件之后来生成我们项目的服务端代码,可谓是一举两得,这也是 Swagger 官方为我们所考虑的一方面。还是那句话,在 Swagger Editor 中,配置 Swagger Editor 需要对 yml 配置源文件有一定的了解和使用,所以,有不清楚的同学请自行查阅相关资料。接下来我们通过 Swagger Editor 官方的 Demo 来为大家配置 Swagger Editor 。Swagger Editor 基本配置信息swagger: "2.0"info: description: "This is a sample server Petstore server. You can find out more about Swagger at http://swagger.io or on irc.freenode.net, #swagger. For this sample, you can use the api key special-key to test the authorization filters." version: "1.0.0" title: "Swagger Petstore" termsOfService: "http://swagger.io/terms/" contact: email: "apiteam@swagger.io" license: name: "Apache 2.0" url: "http://www.apache.org/licenses/LICENSE-2.0.html"host: "petstore.swagger.io"basePath: "/v2"tags: name: "pet" description: "Everything about your Pets" externalDocs: description: "Find out more" url: "http://swagger.io"schemes: "https" "http"Swagger Editor 接口配置信息paths: /pet: post: tags: - "pet" summary: "Add a new pet to the store" description: "" operationId: "addPet" consumes: "application/json" "application/xml" produces: "application/xml" "application/json" parameters: in: "body" name: "body" description: "Pet object that needs to be added to the store" required: true schema: $ref: "#/definitions/Pet" responses: "405": description: "Invalid input"对于以上所使用的属性我们会在本节的后半部分进行详细介绍,这里大家可以先做简单的了解即可。
- 2. Django 使用原生 SQL 操作 MySQL 数据库 在 Django 中配置数据库驱动以及填写相应信息的位置在 settings.py 文件中的 DATABASE 变量:DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'django_manual', 'USER': 'store', 'PASSWORD': 'store.123@', 'HOST': '180.76.152.113', 'PORT': '9002', }}接下来,我们使用 django 自带的 shell 进入交互式模式进行操作。我们同样使用前面已经创建的 user 表和生成的11条数据进行 sql 操作,具体如下:[root@server ~]# cd django-manual/first_django_app/[root@server first_django_app]# pyenv activate django-manual pyenv-virtualenv: prompt changing will be removed from future release. configure `export PYENV_VIRTUALENV_DISABLE_PROMPT=1' to simulate the behavior.(django-manual) [root@server first_django_app]# clear(django-manual) [root@server first_django_app]# python manage.py shellPython 3.8.1 (default, Dec 24 2019, 17:04:00) [GCC 4.8.5 20150623 (Red Hat 4.8.5-39)] on linuxType "help", "copyright", "credits" or "license" for more information.(InteractiveConsole)>>> from django.db import connection>>> cur = connection.cursor()>>> cur.execute('select * from user where 1=1 and name like "user%"')10>>> data1 = cur.fetchone()>>> print(data1)(11, 'user0', 'xxxxxx', '280@qq.com')>>> data2 = cur.fetchone()>>> print(data2)(12, 'user1', 'xxxxxx', '281@qq.com')>>> data3 = cur.fetchmany(5)>>> print(data3)((13, 'user2', 'xxxxxx', '282@qq.com'), (14, 'user3', 'xxxxxx', '283@qq.com'), (15, 'user4', 'xxxxxx', '284@qq.com'), (16, 'user5', 'xxxxxx', '285@qq.com'), (17, 'user6', 'xxxxxx', '286@qq.com'))>>> data4 = cur.fetchall()>>> print(data4)((18, 'user7', 'xxxxxx', '287@qq.com'), (19, 'user8', 'xxxxxx', '288@qq.com'), (20, 'user9', 'xxxxxx', '289@qq.com'))>>> data5 = cur.fetchone()>>> print(data5)None这里,我们可以看到,在 Django 内部中使用原生的 SQL 操作和我们前面使用 mysqlclient 操作数据库几乎是一模一样,函数接口、返回值以及用法都是一致的。接下来我们可以进入下源码内部一探究竟,看看 Django 内部的 connection 究竟是怎么做的。# 源码位置 django/db/__init__.py# 忽略部分代码DEFAULT_DB_ALIAS = 'default'# 忽略部分代码class DefaultConnectionProxy: """ Proxy for accessing the default DatabaseWrapper object's attributes. If you need to access the DatabaseWrapper object itself, use connections[DEFAULT_DB_ALIAS] instead. """ def __getattr__(self, item): return getattr(connections[DEFAULT_DB_ALIAS], item) def __setattr__(self, name, value): return setattr(connections[DEFAULT_DB_ALIAS], name, value) def __delattr__(self, name): return delattr(connections[DEFAULT_DB_ALIAS], name) def __eq__(self, other): return connections[DEFAULT_DB_ALIAS] == other# For backwards compatibility. Prefer connections['default'] instead.connection = DefaultConnectionProxy()...当我们执行 cur = connection.cursor() 时,其实会执行 __getattr__ 这个魔法函数,我们看到它又去调用connections 这个类实例的 cursor() 方法。我们继续追踪 connections,这个也在 __init__.py 文件中:# django/db/__init__.py# ...connections = ConnectionHandler()# ...# django/db/utils.py# 省略部分代码class ConnectionHandler: def __init__(self, databases=None): """ databases is an optional dictionary of database definitions (structured like settings.DATABASES). """ self._databases = databases self._connections = local() @cached_property def databases(self): if self._databases is None: # 获取settings.DATABASES中的值,并解析相关参数 self._databases = settings.DATABASES if self._databases == {}: self._databases = { DEFAULT_DB_ALIAS: { 'ENGINE': 'django.db.backends.dummy', }, } if DEFAULT_DB_ALIAS not in self._databases: raise ImproperlyConfigured("You must define a '%s' database." % DEFAULT_DB_ALIAS) if self._databases[DEFAULT_DB_ALIAS] == {}: self._databases[DEFAULT_DB_ALIAS]['ENGINE'] = 'django.db.backends.dummy' return self._databases def ensure_defaults(self, alias): """ Put the defaults into the settings dictionary for a given connection where no settings is provided. """ try: conn = self.databases[alias] except KeyError: raise ConnectionDoesNotExist("The connection %s doesn't exist" % alias) conn.setdefault('ATOMIC_REQUESTS', False) conn.setdefault('AUTOCOMMIT', True) conn.setdefault('ENGINE', 'django.db.backends.dummy') if conn['ENGINE'] == 'django.db.backends.' or not conn['ENGINE']: conn['ENGINE'] = 'django.db.backends.dummy' conn.setdefault('CONN_MAX_AGE', 0) conn.setdefault('OPTIONS', {}) conn.setdefault('TIME_ZONE', None) for setting in ['NAME', 'USER', 'PASSWORD', 'HOST', 'PORT']: conn.setdefault(setting, '') # 省略部分方法 def __getitem__(self, alias): if hasattr(self._connections, alias): return getattr(self._connections, alias) self.ensure_defaults(alias) self.prepare_test_settings(alias) db = self.databases[alias] # 使用mysql引擎 backend = load_backend(db['ENGINE']) conn = backend.DatabaseWrapper(db, alias) setattr(self._connections, alias, conn) return conn # 忽略部分代码# 忽略部分代码 这里最核心的地方在于这个__getitem__()魔法函数。首先我们在前面的 connection 中调用 __gatattr__ 魔法函数,而该函数中又使用了 connections[DEFAULT_DB_ALIAS] 这样的操作,这个操作又会调用 __getitem__ 魔法函数。 def __getattr__(self, item): return getattr(connections[DEFAULT_DB_ALIAS], item)来重点看__getitem__()这个魔法函数:def __getitem__(self, alias): if hasattr(self._connections, alias): return getattr(self._connections, alias) self.ensure_defaults(alias) self.prepare_test_settings(alias) db = self.databases[alias] # 使用mysql引擎 backend = load_backend(db['ENGINE']) conn = backend.DatabaseWrapper(db, alias) setattr(self._connections, alias, conn) return conn注意:代码首先是要获取 settings.py 中关于数据库的配置,注意我们前面设置的 db[‘ENGINE’] 的值为:django.db.backends.mysql,下面的 load_backend() 方法只是一个简单的导入模块,最核心的就是一句:import_module('%s.base' % backend_name),相当于导入了模块 django.db.backends.mysql.base:def load_backend(backend_name): """ Return a database backend's "base" module given a fully qualified database backend name, or raise an error if it doesn't exist. """ # This backend was renamed in Django 1.9. if backend_name == 'django.db.backends.postgresql_psycopg2': backend_name = 'django.db.backends.postgresql' try: # 最核心的部分 return import_module('%s.base' % backend_name) except ImportError as e_user: # 异常处理,代码省略 ...在前面导入的 django.db.backends.mysql.base文件中,我们可以看到如下代码段:# 源码位置 django/db/backends/mysql/base.pytry: import MySQLdb as Databaseexcept ImportError as err: raise ImproperlyConfigured( 'Error loading MySQLdb module.\n' 'Did you install mysqlclient?' ) from err # ...class DatabaseWrapper(BaseDatabaseWrapper): # ... Database = Database # ... def get_new_connection(self, conn_params): return Database.connect(**conn_params) # ... # 源码位置 django/db/backends/base/base.py# ...class BaseDatabaseWrapper: # ... def connect(self): """Connect to the database. Assume that the connection is closed.""" # Check for invalid configurations. ... # Establish the connection conn_params = self.get_connection_params() ############ 注意,这里的连接会调用下面这个方法得到 ###################### self.connection = self.get_new_connection(conn_params) #################################################################### ... # ...其实从我简化的代码来看,可以看到在 Django 中,对于 MySQL 数据库的连接来说,使用的就是 python 中的 mysqlclient 模块,只不过 Django 在 mysqlclient 基础上又封装了一层,包括里面定义的游标,以及游标的方法都是 mysqlclient 中的函数。后面再介绍 Django 的内置 ORM 模型时候,我们会继续分析这个 mysql 引擎目录下的源码,看 Django 如何一步步封装 mysqlcient 进而实现自己内置的 ORM 模型。
- 8 项目核心复盘 从0基础到笑傲大数据的成长必备秘笈
definitions相关搜索
-
daima
damain
dart
dataset
datasource
datediff
datediff函数
datepicker
datetime
db4o
dbi
dcloud
deallocate
debian安装
debugger
debugging
declaration
declarations
declare
decode函数