prompt相关知识
-
mysql prompt的用法详解 prompt命令可以在mysql提示符中显示当前用户、数据库、时间等信息复制代码 代码如下:mysql -uroot -p --prompt="\\u@\\h:\\d \\r:\\m:\\s>"设置成功后:复制代码 代码如下:Welcome to the MySQL monitor. Commands end with ; or \g.Your MySQL connection id is 5Server version: 5.1.60-log Source distributionCopyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved.Oracle is a registered trademark of Oracle Corporation and/or itsaffiliates. Oth
-
JavaScript入门(5)(prompt消息对话框)prompt用于询问用户消息的对话框,有很好的的用户交互性,包含一个确定按钮,取消按钮和一个文本输入框,用户可在文本输入框输入要交互的信息。 还是让我们先看一下prompt对话框长什么样 可以看到这个对话框是让用户输入成绩的一个窗口,用户可以在文本框中输入自己的成绩。 接下来让我们学习prompt的具体语法格式: prompt(str1,str2); 参数说明: str1:是要显示在消息对话框中的文本,是系统对用户的交互,不用户不可以修改;就像我们上面那张图里的“请输入你的成绩”就是str1;
-
JavaScript入门(5)(prompt消息对话框)prompt用于询问用户消息的对话框,有很好的的用户交互性,包含一个确定按钮,取消按钮和一个文本输入框,用户可在文本输入框输入要交互的信息。 还是让我们先看一下prompt对话框长什么样 可以看到这个对话框是让用户输入成绩的一个窗口,用户可以在文本框中输入自己的成绩。 接下来让我们学习prompt的具体语法格式: prompt(str1,str2); 参数说明: str1:是要显示在消息对话框中的文本,是系统对用户的交互,不用户不可以修改;就像我们上面那张图里的“请输入你的成绩”就是str1;
-
在 Windows Git Bash 中安装 bash-git-prompt需求我经常会在项目根目录中右键点开 Git Bash 进行一些命令行操作,默认窗口中会显示当前文件目录和 git 分支名,但我希望能看到更多信息,如是否存在未提交的修改、未推送的提交等,这样我在每天打开 bash 窗口后就能对当前项目的状态有个大概的了解。搜索我在网上查阅了一番,最终决定使用 bash-git-prompt。结果先放上最终的效果对比图:默认窗口安装 bash-git-prompt 后相关含义如下(详情查看 bash-git-prompt 官方说明):(master3|1): on branch master, ahead of remote by 3 commits, 1 file changed but not staged (status|2): on branch status, 2 fi
prompt相关课程
prompt相关教程
- 2. 安装 PyMySQL 库 PyMySQL 库是用于连接 MySQL 服务器的一个库,对应的是 Python3.x 的版本,如果是 Python2 要使用 MySqlDb 库。我们在使用 PyMySQL 之前要确保已经安装了该模块,下面我们介绍一下如何安装 PyMySQL 库。打开我们的 Anaconda 文件下的 Anaconda Prompt 工具,然后在命令窗口中输入命令行:pip install PyMySQL 接着按回车键,可以看到安装进度,最后显示 Successfully… 表示安装成功:
- 3. Pandas 的安装 上面我们安装的 Anaconda 工具中,里面集成了 pip 工具,它是一个软件包管理器,可简化 Python 软件包的安装,升级和卸载。1. 我们打开 python 模块包网站,找到 Pandas 模块版本列表,上面我们 Anaconda 中带的 Python 是 3.8 版本,我们下载 Pandas‑1.1.3‑cp38‑cp38‑win_amd64.whl,这里的 1.1.3 是 Pandas 的版本号,cp 后面的 38 是 Python 的版本号,win_amd64 表示 Windows 64 位操作系统:2. 下载完成后,打开 Anaconda 中的 Anaconda Powershell Prompt 工具(类似于 Windows 中命令操作窗口):3. 看到当前的操作路径为:C:\Users\13965,把刚才下载的 pandas 的 pandas-1.1.3-cp38-cp38-win_amd64.whl 文件移动到该文件夹下:4. 复制命令:pip install pandas-1.1.3-cp38-cp38-win_amd64.whl 到命令行中,按回车键运行,就会开始安装 pandas1.1.3 :输出 Successfully installed pandas-1.1.3 说明已经成功安装了 Pandas 1.1.3 版本。5. 接下来我们打开 Anaconda 中的 Jupyter notebook 开发工具:6. 在该开发工具中,通过输入下面代码:import pandas as pd pd.__version__然后,点击运行,看到输出结果,里面包含了 Pandas 的版本信息,到此证明我们的 Pandas 开发环境已经配置好,Pandas 库也已经安装成功了。
- 1. 新建 Scrapy 项目 Scrapy 框架和 Django 框架类似,先使用命令行来开启一个项目的最小工程。这里会创建 python 的虚拟环境,如果不熟悉 pyenv 工具的同学,可以参考这里的文章。# 新建scray-test目录,后续会保存scrapy项目的相关代码[root@server ~]# mkdir scrapy-test[root@server ~]# cd scrapy-test/# 安装scrapy的虚拟环境[root@server scrapy-test]# pyenv virtualenv 3.8.1 scrapy-test[root@server scrapy-test]# pyenv activate scrapy-test pyenv-virtualenv: prompt changing will be removed from future release. configure `export PYENV_VIRTUALENV_DISABLE_PROMPT=1' to simulate the behavior.# 使用 pip 命令安装 Scrapy 框架(scrapy-test) [root@server scrapy-test]# pip install scrapy使用命令行创建一个新的 Scrapy 项目:(scrapy-test) [root@server scrapy-test]# scrapy startproject china_pubNew Scrapy project 'china_pub', using template directory '/root/.pyenv/versions/3.8.1/envs/scrapy-test/lib/python3.8/site-packages/scrapy/templates/project', created in: /root/scrapy-test/china_pubYou can start your first spider with: cd china_pub scrapy genspider example example.com查看创建好的 Scrapy 项目的文件结构:(scrapy-test) [root@server scrapy-test]# tree ..└── china_pub ├── china_pub │ ├── __init__.py │ ├── items.py │ ├── middlewares.py │ ├── pipelines.py │ ├── __pycache__ │ ├── settings.py │ └── spiders │ ├── __init__.py │ └── __pycache__ └── scrapy.cfg我们可以看到 Scrapy 命令给我们创建的项目目录和文件,这里我们来简单分析下这些目录和文件的含义,后面在介绍 Scrapy 框架的架构图后,会对这些目录以及 Scrapy 的运行有着深刻的理解:items.py:items.py 文件中一般用于定义 Item 对象,它用来指定爬取的数据的结构;middlewares.py:中间件文件,主要是处理 request 和 response 的中间过程;pipelines.py:项目的管道文件,它会对 items.py 中里面定义的数据进行进一步的加工与处理。启用该 pipline 时需要在 settings.py 中进行配置;settings.py:项目的配置文件,比如设置处理 Item 对象的 piplines、请求头的 ‘’User-Agent" 字段、代理、Cookie等;spider 目录:主要是存放爬取的动作及解析网页数据的代码。
- 2.3 pyenv 实战 接下来我们使用 pyenv 工具在 CentOS 系统上实战下虚拟环境的操作,这里安装 pyenv 的步骤略掉。检查 pyenv 的版本,以及可以安装的 Python 版本。可以看到目前 Python 的最新版本已经到 3.9 了[root@server ~]# pyenv --versionpyenv 1.2.15-9-gac246e1[root@server ~]# pyenv install --listAvailable versions: 2.1.3 ... 2.7.17 ... 3.7.6 3.8.0 3.8-dev 3.8.1 3.9-dev ...安装 Python 3.8.1 版本解释器,这样后续可以基于 3.8.1 版本的 Python 创建虚拟环境:[root@server ~]# pyenv install 3.8.1Downloading Python-3.8.1.tar.xz...-> https://www.python.org/ftp/python/3.8.1/Python-3.8.1.tar.xz...使用 3.8.1 版本的 python 解释器创建虚拟环境 env-3.8.1[root@server ~]# pyenv virtualenv 3.8.1 env-3.8.1Looking in links: /tmp/tmp7m4c6giwRequirement already satisfied: setuptools in /root/.pyenv/versions/3.8.1/envs/env-3.8.1/lib/python3.8/site-packages (41.2.0)Requirement already satisfied: pip in /root/.pyenv/versions/3.8.1/envs/env-3.8.1/lib/python3.8/site-packages (19.2.3)[root@server ~]# pyenv versions system* 3.8.1 (set by /root/.pyenv/version) 3.8.1/envs/env-3.8.1 env-3.8.1进入 env-3.8.1 的虚拟环境,在输入 python 命令后可以看到 版本是 3.8.1。另外通过 pip 命令可以查看已经安装的模块。[root@server ~]# pyenv activate env-3.8.1pyenv-virtualenv: prompt changing will be removed from future release. configure `export PYENV_VIRTUALENV_DISABLE_PROMPT=1' to simulate the behavior.(env-3.8.1) [root@server ~]# pythonPython 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.>>> exit()(env-3.8.1) [root@server ~]# pip listPackage Version---------- -------pip 19.2.3 setuptools 41.2.0在虚拟环境中安装第三方模块,比如操作 MySQL 数据的 pymysql:(env-3.8.1) [root@server ~]# pip install pymsql(env-3.8.1) [root@server ~]# ls ~/.pyenv/versions/env-3.8.1/lib64/python3.8/site-packages/pymysql_auth.py connections.py cursors.py optionfile.py _socketio.pycharset.py constants err.py protocol.py times.py_compat.py converters.py __init__.py __pycache__ util.py最后退出该虚拟环境,并且由于项目不再继续,将删除该虚拟环境。可以看到在删除该虚拟环境后,对应的目录也被删除了(env-3.8.1) [root@server ~]# pyenv deactivate[root@server ~]# pyenv virtualenv-delete env-3.8.1pyenv-virtualenv: remove /root/.pyenv/versions/3.8.1/envs/env-3.8.1? y[root@server ~]# ls ~/.pyenv/versions/3.8.1/envs我们实战操作了 pyenv 工具管理虚拟环境,主要是加深了对虚拟环境的理解。其实一个虚拟环境对应的就是一个目录,在虚拟环境中安装的所有模块都会放到这个目录下。这样每个环境之间下载的模块不会产生冲突,这样能很好解决不同项目依赖包冲突的问题。
- 2.2 pyenv 纯 pyenv 是可以看做一个 Python 版本管理器,可以同时管理多个 Python 版本共存。 简单地说,pyenv 可以根据需求使用户在系统里安装和管理多个 Python 版本。它的基本功能如下:配置当前用户的 Python 的版本;配置当前 shell 的 python 版本;配置某个项目(目录及子目录)的 Python 版本;配置多个虚拟环境。注意:pyenv 的工作原理就是利用系统环境变量 PATH 的优先级,劫持 Python 的命令到 pyenv 上,根据用户所在的环境或目录,使用不同版本的 Python 。2.2.1 pyenv 的安装、更新和卸载安装: 在 Linux 系统上安装 pyenv 的方式非常简单,由官方提供的安装 bash 脚本,也可以直接下载源码即可。具体操作如下:# 安装git$ yum install git -y$ git clone https://github.com/pyenv/pyenv.git ~/.pyenv# 安装 pyenv-virtualenv$ git clone https://github.com/pyenv/pyenv-virtualenv.git ~/.pyenv/plugins/pyenv-virtualenv$ cat ~/.bashrc...# 在~/.bashrc最后加上如下3行export PATH="~/.pyenv/bin:$PATH"eval "$(pyenv init -)"eval "$(pyenv virtualenv-init -)"# 使配置生效$ source ~/.bashrc# 查看pyenv的版本$ pyenv version更新: 因为是使用 git 安装的 pyenv,所以更新只需要继续用 git 拉最新的代码即可。更新 pyenv 步骤如下:cd ~/.pyenv 或者 cd $(pyenv root)git pull卸载: 由于 pyenv 把一切都放在~/.pyenv 下了,所以卸载很方便,两个步骤就行了:删除 ~/.bashrc 中添加的环境变量;删除 ~/.pyenv 目录及其下面所有文件。rm -rf ~/.pyenv` 或者 `rm -rf $(pyenv root)Tips:pyenv 并不支持 Windows,因为作者大大不想浪费时间去兼容 Windows 平台。2.2.2 pyenv 的命令pyenv 的常用命令如下:pyenv commands : 查看 pyenv 工具支持的命令;pyenv local:python 的局部设置,当前目录生效,加上 --unset 选项表示取消;pyenv global:python 的全局设置,整个系统生效;pyenv shell:指定当前 shell 使用的 Python , 可以使用 --unset 取消指定 ;pyenv --version: 查看 pyenv 的版本;pyenv version:显示当前活动的 Python 版本。# 系统环境[root@server ~]# pyenv versionsystem (set by /root/.pyenv/version)# 激活创建的虚拟环境[root@server ~]# pyenv activate env-3.8.1pyenv-virtualenv: prompt changing will be removed from future release. configure `export PYENV_VIRTUALENV_DISABLE_PROMPT=1' to simulate the behavior.# 再次查看(env-3.8.1) [root@server ~]# pyenv versionenv-3.8.1 (set by PYENV_VERSION environment variable)pyenv versions:查看所有的虚拟环境;pyenv install --list: 查看所有可以安装的 Python 版本;pyenv install:安装对应版本的 Python 作为虚拟环境的解释器。这一步通常第一次需要联网下载对应的 Python 包,会比较慢;pyenv uninstall:卸载某个 Python 版本。pyenv-virtualenv 工具的常用命令:pyenv virtualenv python版本号 name :创建一个虚拟环境,,命名为 name, 创建好后可通过 pyenv versions 来查看;pyenv activate name :切换到 name 虚拟环境中 ;pyenv deactivate :退出虚拟环境 ;pyenv virtualenv-delete name :删除名为 name 的虚拟环境;
- 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 模型。
prompt相关搜索
-
pack
package
package文件
padding
pages
page对象
panda
panel
panel控件
param
parameter
parcel
parent
parentnode
parents
parse
parse error
parseint
partition
pascal