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列出所有可以升级的包。
升级 pippython -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-pythonPyMySQLcymysqlmysqlclient
官方支持是(Oracle 官方维护)社区维护社区维护社区维护
兼容性完全兼容 MySQL完全兼容 MySQL完全兼容 MySQL完全兼容 MySQL
依赖纯 Python 实现,无需外部依赖纯 Python 实现,无需外部依赖基于 Cython,性能更高基于 C 扩展,性能最高
安装pip install mysql-connector-pythonpip install pymysqlpip install cymysqlpip 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()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值