目录
5-元类
5-1-概念
- 元类是创建类的类。
- 在 Python 中,默认的元类是 `type`。
- 可以通过自定义元类来控制类的创建过程,如修改类的属性、方法等。
5-2-示例
5-2-1-代码
# 定义元类
class MyMeta(type):
def __new__(cls, name, bases, dct):
# 在类创建时动态添加属性和方法
dct["new_attribute"] = "This isa a new attribute"
def new_method(self):
return "This is a new method"
dct["new_method"] = new_method
# 调用父类的 __new__ 方法创建类
return super().__new__(cls, name, bases, dct)
# 使用元类创建类
class MyClass(metaclass=MyMeta):
pass
# 测试
obj = MyClass()
print(obj.new_attribute) # 输出: This is a new attribute
print(obj.new_method()) # 输出: This is a new method
5-2-2-输出结果
输出结果
5-2-3-代码分析
- MyMeta 是一个自定义元类,继承自 type。
- __new__ 方法在类创建时被调用,允许我们修改类的属性和方法。
- dct 是一个字典,包含了类的所有属性和方法。
- 我们在 dct 中动态添加了一个属性 new_attribute 和一个方法 new_method。
6-描述符
6-1-概念
- 描述符是实现了 `__get__()`、`__set__()` 或 `__delete__()` 方法的对象,用于控制对类属性的访问。
- 描述符可以用于实现属性的验证、计算属性等功能。
6-2-示例
6-2-1-代码
class PositiveNumber:
def __get__(self, instance, owner):
return instance._value
def __set__(self, instance, value):
if value < 0:
raise ValueError("Value must be positive")
instance._value = value
class MyClass:
number = PositiveNumber()
def __init__(self, value):
self.number = value
obj = MyClass(5)
print(obj.number)
try:
obj.number = -1
except ValueError as e:
print(e)
6-2-2-代码分析
`PositiveNumber` 是一个描述符类,实现了 `__get__()` 和 `__set__()` 方法。
`__set__()` 方法用于验证属性值是否为正数,如果不是则抛出 `ValueError` 异常。
`MyClass` 类使用 `PositiveNumber` 描述符来控制 `number` 属性的访问。
7-练习题-Python操作MySql数据库
要实现连接 MySQL 数据库并对 `users` 表进行增删改查(CRUD)操作,可以使用 Python 的 `mysql-connector-python` 或 `pymysql` 库。以下是基于 `mysql-connector-python` 的实现示例。
7-1-安装依赖
首先需要安装 `mysql-connector-python`:
pip install mysql-connector-python
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple mysql-connector-python
7-2-数据库准备
假设你已经有一个 MySQL 数据库,并且其中有一个名为 `users` 的表,表结构如下:
CREATE TABLE `w_user` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
`phone` varchar(100) NULL DEFAULT NULL COMMENT '手机号',
`email` varchar(100) DEFAULT NULL COMMENT '邮箱',
`password` varchar(255) DEFAULT NULL COMMENT '密码',
`salt` varchar(50) DEFAULT NULL COMMENT '盐值',
`createTime` datetime(0) NULL DEFAULT NULL COMMENT '创建时间',
`updateTime` datetime(0) NULL DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`id`) USING BTREE
) ;
7-3-Python 实现 CRUD 操作
以下代码展示了如何连接 MySQL 数据库并对 `users` 表进行增、删、改、查操作。
import mysql.connector
from mysql.connector import Error
from datetime import datetime
# 连接数据库的函数
def create_connection(host, user, password, database):
try:
connection = mysql.connector.connect(
host=host,
user=user,
password=password,
database=database
)
if connection.is_connected():
print("成功连接到数据库")
return connection
except Error as e:
print(f"连接失败: {e}")
return None
# 插入数据(Create)
def insert_user(connection, id,phone,email,password,salt,createTime,updateTime):
try:
cursor = connection.cursor()
query = "INSERT INTO w_user (id,phone,email,password,salt,createTime,updateTime) VALUES (%s, %s, %s,%s, %s, %s, %s)"
values = (id,phone,email,password,salt,createTime,updateTime)
cursor.execute(query, values)
connection.commit()
print(f"插入成功: {cursor.rowcount} 条记录")
except Error as e:
print(f"插入失败: {e}")
# 查询数据(Read)
def select_users(connection):
try:
cursor = connection.cursor(dictionary=True)
query = "SELECT * FROM w_user"
cursor.execute(query)
rows = cursor.fetchall()
for row in rows:
print(row)
except Error as e:
print(f"查询失败: {e}")
# 更新数据(Update)
def update_user(connection, id,phone,email,password,salt,createTime,updateTime):
try:
cursor = connection.cursor()
query = "UPDATE w_user SET id = %s, phone = %s, email = %s , password = %s, salt = %s, createTime = %s, updateTime = %s WHERE id = %s"
values = (id,phone,email,password,salt,createTime,updateTime)
cursor.execute(query, values)
connection.commit()
print(f"更新成功: {cursor.rowcount} 条记录")
except Error as e:
print(f"更新失败: {e}")
# 删除数据(Delete)
def delete_user(connection, user_id):
try:
cursor = connection.cursor()
query = "DELETE FROM w_user WHERE id = %s"
values = (user_id,)
cursor.execute(query, values)
connection.commit()
print(f"删除成功: {cursor.rowcount} 条记录")
except Error as e:
print(f"删除失败: {e}")
# 主程序
if __name__ == "__main__":
# 数据库连接信息
host = "localhost"
user = "username"
password = "pwssword"
database = "dbName"
# 创建数据库连接
connection = create_connection(host, user, password, database)
if connection:
# 插入用户
insert_user(connection, "1","13910118191", "1901@qq.com", "123456","1234",datetime.now(),datetime.now())
insert_user(connection, "2","12910118192", "1902@qq.com", "654321","4321",datetime.now(),datetime.now())
# 查询所有用户
print("查询所有用户:")
select_users(connection)
# 更新用户
print("更新用户:")
update_user(connection, 1, "11910118111", "1911@qq.com", "123411","1211",datetime.now(),datetime.now())
select_users(connection)
# 删除用户
print("删除用户:")
delete_user(connection, 2)
select_users(connection)
# 关闭连接
connection.close()
print("数据库连接已关闭")
7-4-输出结果
输出结果
7-5-代码说明
7-5-1-数据库连接
- 使用 `mysql.connector.connect()` 方法连接数据库。
- 如果连接成功,返回一个连接对象;否则打印错误信息。
7-5-2-插入数据
- 使用 SQL `INSERT INTO` 语句插入数据。
- 参数化查询(`%s` 占位符)防止 SQL 注入攻击。
7-5-3-查询数据
- 使用 SQL `SELECT` 语句查询数据。
- 设置 `dictionary=True` 可以让结果以字典形式返回,便于处理。
7-5-4-更新数据
- 使用 SQL `UPDATE` 语句更新指定用户的记录。
7-5-5-删除数据
- 使用 SQL `DELETE` 语句删除指定用户的记录。
7-5-6-关闭连接
- 操作完成后,调用 `connection.close()` 关闭数据库连接。
什么IT
本文暂时没有评论,来添加一个吧(●'◡'●)