alias相关知识
-
T-SQL Alias在开发SQL时,少不了使用别名(Alias),有Column(字段)别名或Table(表)别名。使用别名,是为了简单易懂。别名一般放在AS关键词后,也可省略此关键词。参考下面例子:http://www.cnblogs.com/insus/articles/1968173.htmlhttp://www.cnblogs.com/insus/articles/1900559.htmlhttp://www.cnblogs.com/insus/articles/1900526.htmlhttp://www.cnblogs.com/insus/articles/1952470.htmlhttp://www.cnblogs.com/insus/articles/1916558.html等等。
-
【转】Webpack 中配置的 alias 在 Mocha 测试用例中失效的解决方案背景在日常开发中,有些模块层级太深,在使用的时候可能会写成import mod from '../../../../a/deep/folder/mod'为了解决这种问题,我们使用 webpack 的 resolve.alias 能力,对目录进行命名:{ resolve: { alias: { mod: path.resolve(__dirname, 'src/a/deep/folder/mod')
-
MYSQL错误代码:1248 Every derived table must have its own alias 解决MYSQL中执行如下嵌套子查询时报错select id from (select * from pythontab where type=1)报错如下: 错误代码: 1248 Every derived table must have its own alias这句话的意思是说每个派生出来的表都必须有一个自己的别名当我执行到这里的时候就抛出了这个异常,原来我进行嵌套查询的时候子查询出来的的结果是作为一个派生表来进行上一级的查询的,所以子查询的结果必须要有一个别名把MySQL语句改成:select id from (select * from pythontab where type=1) as t;问题就解决了,虽然只加了一个没有任何作用的别名t
-
30 个方便的 Bash shell 别名bash 别名alias只不过是指向命令的快捷方式而已。alias 命令允许用户只输入一个单词就运行任意一个命令或一组命令(包括命令选项和文件名)。执行 alias 命令会显示一个所有已定义别名的列表。你可以在 ~/.bashrc 文件中自定义别名。使用别名可以在命令行中减少输入的时间,使工作更流畅,同时增加生产率。本文通过 30 个 bash shell 别名的实际案例演示了如何创建和使用别名。bash alias 的那些事bash shell 中的 alias 命令的语法是这样的:alias [alias-name[=string]...]如何列出 bash 别名输入下面的 alias 命令:alias结果为:alias ..='cd ..'alias amazonbackup='s3backup'alias apt-get='sudo apt-get'...alias 命令默认会列出当前用户定义
alias相关课程
alias相关教程
- 4. SQL As SQL As 主要用于给数据表或字段给定别名(Alias)。使用语法如下:SELECT [col] AS [alias1] FROM [table_name] AS [alias2]其中col表示字段名称,table_name表示表名称,alias表示别名,数字1、2代表多个别名。
- 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 模型。
- 2. content 阶段 content 阶段中最主要的 static 模块,该模块提供了root 和 alias 这两个常用的指令。二者的用法如下:Syntax: alias pathDefault: —Context: locationSyntax: root pathDefault: root htmlContext: http, server, location, if in location可以看到,单从指令用法上就可以看到不少区别,首先是 alias 指令没有默认值,而且该指令只能在 location 中使用。而 root 可以存在与 http、server、location 等多个指令块中,还可以出现在 if 指令中。另外,最最主要的不同是两个指令会以不同的方式将请求映射到服务器文件上。root 指令会用[root 路径 + location 路径]的规则映射静态资源请求,而 alias 会使用 alias 的路径替换 location 路径。此外 alias 后面必须要用“/”结束,否则会找不到文件的,而 root 则可有可无。来看下面一个例子:location ^~ /test { root /root/html/;}location ^~ /test2/ { alias /root/html/;}对于 http 请求: http://ip:端口/test/web1.html访问的是主机 上全路径为 /root/html/test/web1.html的静态资源;而请求http://ip:端口/test2/web1.html 访问的是全路径为/root/html/web1.html的静态资源,/test2/已经被替换掉了。在 static 模块中,还提供了 3 个变量供我们使用,分别是:request_filename: 访问静态资源的完整路径document_root: 访问静态资源文件所在目录realpath_root: 如果 document_root 是软链接,则改变量会将其替换成真正的地址同样是上面的例子,稍做改动: location /web { default_type text/html; alias /root/test/web; return 200 '$request_filename:$document_root:$realpath_root\n'; }访问 http://ip:端口//web/web1.html, 返回的结果为:/root/test/web/web1.html:/root/test/web:/root/test/web在 content 阶段,在 static 模块之前,还会执行的模块有 index 和 autoindex模块。index 模块提供了 index 指令,用于指定/访问时返回 index 文件内容。autoindex 模块会根据配置决定是否以列表的形式展示目录下的内容,这个功能在后续实战中搭建内部 pip 源中会用到。Syntax: index file ...;Default: index index.html;Context: http, server, location# 示例,访问 uri=/ 时,返回静态资源 index.html 文件中的内容location / { index index.html;}# 是否开启目录显示,默认Nginx是不会显示目录下的所有文件Syntax: autoindex on | off;Default: autoindex off;Context: http, server, location# 显示出文件的实际大小Syntax: autoindex_exact_size on | off;Default: autoindex_exact_size on;Context: http, server, location# 显示格式,默认是html形式显示Syntax: autoindex_format html | xml | json | jsonp;Default: autoindex_format html;Context: http, server, location# 显示时间,设置为on后,按照服务器的时钟为准Syntax: autoindex_localtime on | off;Default: autoindex_localtime off;Context: http, server, location
- 4. 小结 本节,我们带大家学习了 VueRouter 路由重定向和别名。主要知识点有以下几点:通过 redirect 属性指定路由重定向地址。通过 alias 属性配置路由别名。
- 2. 静态服务资源配置 配置静态资源服务器是非常简单的一件事情。实现静态资源访问的关键指令有 root 和 alias,我们会做一个案例来演示其用法和二者的区别。
- 6.2 思路 通过 alias rm 来将删除的文件,移动文件到一个回收站目录;定期的在系统磁盘允许可控的使用率情况下,对回收站目录下的文件进行删除。
alias相关搜索
-
ajax
android
a href
abap
abap开发
abort
absolutelayout
abstractmethoderror
abstracttablemodel
accept
access
access教程
accordion
accumulate
acess
action
actionform
actionlistener
activity
addeventlistener