Python学习第十四天

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 - 开源作者methaneadamchainz 提供,纯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()

你可能感兴趣的:(Python学习,python,学习,开发语言)