pip命令
pip
是Python的包管理工具,用于安装和管理Python 第三方库
安装
安装pip指令(主要是为了更换pip的国内源),在C:\Users下建立pip文件夹,在pip文件夹里建立pip.ini(C盘不让建立可以桌面建立拖进去)文件内容如下:
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
常用命令
操作类型 | 命令格式 | 描述 |
---|---|---|
安装包 | pip install <包名> | 安装指定的 Python 包。 |
pip install <包名>==<版本号> | 安装指定版本的 Python 包。 | |
pip install <包名> --upgrade | 升级指定的 Python 包到最新版本。 | |
pip install -r requirements.txt | 根据 requirements.txt 文件安装所有依赖包。 | |
卸载包 | pip uninstall <包名> | 卸载指定的 Python 包。 |
查看包 | pip list | 列出当前环境中已安装的所有包。 |
pip show <包名> | 显示指定包的详细信息(版本、路径、依赖等)。 | |
搜索包 | pip search <包名> | 在 PyPI 上搜索指定的包。 |
冻结依赖 | pip freeze | 列出当前环境中已安装的包及其版本,适合生成 requirements.txt 文件。 |
pip freeze > requirements.txt | 将当前环境的依赖包列表保存到 requirements.txt 文件中。 | |
检查更新 | pip list --outdated | 列出所有可以升级的包。 |
升级 pip | python -m pip install --upgrade pip | 升级 pip 到最新版本。 |
安装本地包 | pip install <路径> | 从本地路径安装 Python 包(支持 .whl 或源码包)。 |
安装开发版 | pip install <包名> --pre | 安装包的开发版本(包括预发布版本)。 |
指定源安装 | pip install <包名> -i <镜像源> | 从指定的镜像源安装包(如清华源、阿里云源等)。 |
忽略缓存 | pip install <包名> --no-cache-dir | 安装包时不使用缓存。 |
安装用户目录 | pip install <包名> --user | 将包安装到用户目录,避免全局安装。 |
导出环境 | pip freeze > requirements.txt | 导出当前环境的依赖包列表到 requirements.txt 。 |
导入环境 | pip install -r requirements.txt | 根据 requirements.txt 安装依赖包。 |
检查兼容性 | pip check | 检查已安装的包是否有依赖冲突。 |
清理缓存 | pip cache purge | 清理 pip 的缓存。 |
常用镜像源
镜像源名称 | 镜像源地址 |
---|---|
官方源 | https://pypi.org/simple(这个巨慢,默认还是这个) |
阿里云 | https://mirrors.aliyun.com/pypi/simple/ |
清华大学 | https://pypi.tuna.tsinghua.edu.cn/simple/ |
豆瓣 | https://pypi.douban.com/simple/ |
中国科技大学 | https://pypi.mirrors.ustc.edu.cn/simple/ |
Python-Mysql
安装驱动
- mysql-connector-python - mysql 官方提供,纯python构建
- PyMySQL - 开源作者methane和adamchainz 提供,纯python构建
- cymysql - fork of pymysql,C构建
- mysqlclient - 开源作者methane提供,C构建
# 安装语句
pip install mysql-connector-python
pip install PyMySQL
pip install cymysql
pip install mysqlclient
驱动对比
特性/驱动 | mysql-connector-python | PyMySQL | cymysql | mysqlclient |
---|---|---|---|---|
官方支持 | 是(Oracle 官方维护) | 社区维护 | 社区维护 | 社区维护 |
兼容性 | 完全兼容 MySQL | 完全兼容 MySQL | 完全兼容 MySQL | 完全兼容 MySQL |
依赖 | 纯 Python 实现,无需外部依赖 | 纯 Python 实现,无需外部依赖 | 基于 Cython,性能更高 | 基于 C 扩展,性能最高 |
安装 | pip install mysql-connector-python | pip install pymysql | pip install cymysql | pip install mysqlclient |
性能 | 中等 | 中等 | 较高 | 最高 |
Python 3 支持 | 是 | 是 | 是 | 是 |
API 风格 | 符合 PEP 249(DB-API 2.0) | 符合 PEP 249(DB-API 2.0) | 符合 PEP 249(DB-API 2.0) | 符合 PEP 249(DB-API 2.0) |
SSL 支持 | 是 | 是 | 是 | 是 |
连接池 | 支持 | 不支持(需第三方库) | 不支持(需第三方库) | 不支持(需第三方库) |
异步支持 | 不支持 | 支持(通过 aiomysql ) | 不支持 | 不支持 |
适用场景 | 官方推荐,适合大多数场景 | 纯 Python 实现,适合简单场景 | 高性能需求,适合复杂场景 | 高性能需求,适合复杂场景 |
缺点 | 性能较低 | 性能较低 | 社区支持较少 | 安装可能依赖系统库 |
驱动选择
-
如果需要官方支持,选择
mysql-connector-python
。 -
如果需要纯 Python 实现,选择
PyMySQL
。 -
如果需要高性能,选择
cymysql
或mysqlclient
。
连接数据库
连接数据库:
驱动类.connect(
host='mysql所在主机的ip',
port=mysql的端口号,
user="mysql 用户名",
password="mysql 的密码",
db="要使用的库名",
charset="连接中使用的字符集"
)
"""
目前使用的是mysqlclient 驱动 其他驱动类似
除了把import引入更改以外 几乎一致
PyMySql使用:import pymysql # pymysql.connect
mysql-connector-python使用:import mysql-connector-python # mysql-connector.connect
cymysql使用:import cymysql # cymysql.connect
只要获取到游标即可其他都一样(也正常因为python已经规定了接口是什么样的其他的只要保证接口一致即可)
"""
import MySQLdb
'''
创建mysql本地数据库并创建名称为python_db的schema(编码为utf8就行 创建的时候选择)
'''
conn = MySQLdb.connect(
host='localhost', # mysql所在主机的ip
port=3306, # mysql的端口号
user="root", # mysql 用户名
password="123456", # mysql 的密码
db="python_db", # 要使用的库名
charset="utf8" # 连接中使用的字符集
)
# 定义游标
cursor = conn.cursor()
# 创建表
cursor.execute(
"""
create table if not exists teacher
(
id varchar(10) null,
name varchar(10) null
)
"""
)
# 输出0
row_count = cursor.execute('select * from teacher')
print(f'cursor.execute返回结果为数据库条数为:{row_count}')
# 查询第一个 fetch就是拿出来的意思取来的意思 相当于这条内容被拿出来了 所以就是使用不要同时跟fetchall同时使用除非第一条没有
'''
你可以试试 fetchall 然后再fetchone
是不是fetchone是0
'''
result = cursor.fetchone()
print(result)
# 查询所有
result = cursor.fetchall()
print(result)
执行
格式:游标.execute('SQL语句')
sql语句包含创建数据库,创建表,查询、修改、插入、删除、加索引等
操作类型 | SQL 语句示例 | Python 传递参数示例 | 描述 |
---|---|---|---|
数据库操作 | CREATE DATABASE 数据库名; | 无 | 创建数据库。 |
DROP DATABASE 数据库名; | 无 | 删除数据库。 | |
USE 数据库名; | 无 | 切换到指定数据库。 | |
创建表 | CREATE TABLE 表名 (列1 数据类型, 列2 数据类型, ...); | 无 | 创建表。 |
CREATE TABLE 表名 (列1 数据类型 PRIMARY KEY, 列2 数据类型, ...); | 无 | 创建表并设置主键。 | |
查询数据 | SELECT * FROM 表名; | 无 | 查询表中所有数据。 |
SELECT 列1, 列2 FROM 表名; | 无 | 查询指定列的数据。 | |
SELECT * FROM 表名 WHERE 条件; | 游标.execute("SELECT * FROM 表名 WHERE 列名 = %s;", (值,)) | 根据条件查询数据。 | |
SELECT * FROM 表名 WHERE 列名 IN (%s, %s); | 游标.execute("SELECT * FROM 表名 WHERE 列名 IN (%s, %s);", (值1, 值2)) | 查询多个条件的数据。 | |
SELECT * FROM 表名 LIMIT 数量; | 游标.execute("SELECT * FROM 表名 LIMIT %s;", (数量,)) | 查询指定数量的数据。 | |
SELECT * FROM 表名 ORDER BY 列名 ASC/DESC; | 无 | 按列排序查询数据。 | |
插入数据 | INSERT INTO 表名 (列1, 列2, ...) VALUES (值1, 值2, ...); | 游标.execute("INSERT INTO 表名 (列1, 列2) VALUES (%s, %s);", (值1, 值2)) | 插入单条数据。 |
INSERT INTO 表名 (列1, 列2, ...) VALUES (值1, 值2, ...), (值1, 值2, ...); | 游标.executemany("INSERT INTO 表名 (列1, 列2) VALUES (%s, %s);", [(值1, 值2), ...]) | 插入多条数据。 | |
更新数据 | UPDATE 表名 SET 列1=值1, 列2=值2 WHERE 条件; | 游标.execute("UPDATE 表名 SET 列1=%s WHERE 列2=%s;", (值1, 值2)) | 更新符合条件的数据。 |
UPDATE 表名 SET 列1=值1; | 游标.execute("UPDATE 表名 SET 列1=%s;", (值1,)) | 更新表中所有数据的指定列。 | |
删除数据 | DELETE FROM 表名 WHERE 条件; | 游标.execute("DELETE FROM 表名 WHERE 列名=%s;", (值,)) | 删除符合条件的数据。 |
DELETE FROM 表名; | 无 | 删除表中所有数据。 | |
加索引 | CREATE INDEX 索引名 ON 表名 (列名); | 无 | 为表的指定列创建索引。 |
CREATE UNIQUE INDEX 索引名 ON 表名 (列名); | 无 | 为表的指定列创建唯一索引。 | |
DROP INDEX 索引名 ON 表名; | 无 | 删除表的索引。 |
import MySQLdb
conn = MySQLdb.connect(
host='localhost', # mysql所在主机的ip
port=3306, # mysql的端口号
user="root", # mysql 用户名
password="123456", # mysql 的密码
charset="utf8" # 连接中使用的字符集
)
# 定义游标
cursor = conn.cursor()
# CREATE DATABASE 数据库名; 创建数据库。
# cursor.execute("CREATE DATABASE python_db")
# USE 数据库名;
cursor.execute("USE python_db")
# DROP DATABASE 数据库名; 删除数据库。
#cursor.execute("DROP DATABASE python_db")
# 创建表
cursor.execute(
"""
create table if not exists teacher
(
id varchar(10) null,
name varchar(10) null
)
"""
)
# 插入单条数据 插入数据 INSERT INTO 表名 (列1, 列2, ...) VALUES (值1, 值2, ...); 游标.execute("INSERT INTO 表名 (列1, 列2) VALUES (%s, %s);", (值1, 值2))
cursor.execute("INSERT INTO teacher (id, name) VALUES (%s, %s);", ('01', '赵老师'))
conn.commit() # 事务提交
# 插入多条 游标.executemany("INSERT INTO 表名 (列1, 列2) VALUES (%s, %s);", [(值1, 值2), ...])
cursor.executemany("INSERT INTO teacher (id, name) VALUES (%s, %s);", [('02', '钱老师'),('03', '孙老师')])
conn.commit() # 事务提交
#查询多个 游标.execute("SELECT * FROM 表名 WHERE 列名 = %s;", (值,)) 值后面的,可别丢了
result_count = cursor.execute("SELECT * FROM teacher WHERE name like %s;", ("%"+"孙老师"+"%",))
print(result_count)
result = cursor.fetchall()
print(result)
# 更新结果 游标.execute("UPDATE 表名 SET 列1=%s WHERE 列2=%s;", (值1, 值2))
cursor.execute("UPDATE teacher set name = %s WHERE id = %s", ('刘老师','02'))
conn.commit() # 事务提交
# 删除 游标.execute("DELETE FROM 表名 WHERE 列名=%s;", (值,)) 逗号别丢了
cursor.execute("delete from teacher where id = %s", ('02',))
conn.commit() # 事务提交
# 最后关闭连接
conn.close()