Python 连接 MySQL 及 SQL增删改查(主要使用sqlalchemy)

目录

一、环境

二、MySQL的连接和使用

2.1方式一:sql为主

2.1.1创建连接

2.1.2 表结构

2.1.3 新增数据

​编辑

2.1.4 查看数据

​编辑

2.1.5 修改数据

2.1.6 删除数据

2.2方式二:orm对象关系映射

2.2.1 mysql连接

2.2.2 创建表

2.2.3 新增数据

​编辑

2.2.4 查询数据

2.2.5 修改数据

​编辑

2.2.6 删除数据


一、环境

工作中需要用到python和mysql数据库,本次文档记录相关操作。

环境:windows10、python 3.11.7

mysql版本:5.7

二、MySQL的连接和使用

本人使用过的两种方式

2.1方式一:sql为主

2.1.1创建连接
import sqlalchemy
from sqlalchemy.orm import scoped_session, sessionmaker

USERNAME = "root"  # 用户名
PASSWORD = "123456"  # 密码
ADDR = "localhost"  # 连接地址 本地localhost 服务器就是服务器的地址XXX
PORT = "3306"  # mysql端口号
DATABASE = "test"  # 连接的数据库名


class MysqlSession:
    def __init__(self):
        self.create_connection()

    def create_connection(self):
        engine = sqlalchemy.create_engine(
            f"mysql+pymysql://{USERNAME}:{PASSWORD}@{ADDR}:{PORT}/{DATABASE}?charset=utf8",
            max_overflow=50,  # 超过连接池大小外最多创建的连接
            pool_size=50,  # 连接池大小
            pool_recycle=30  # 多久之后对线程池中的线程进行一次连接的回收(重置),
            , echo=False
        )
        self.connection = scoped_session(sessionmaker(bind=engine))

    def get_connection(self):
        return self.connection

    def ins(self, sql):  # 新增数据
        return self.connection.execute(sql).lastrowid

    def arr(self, sql):  # 查询多条数据
        return self.connection.execute(sql).fetchall()

    def obj(self, sql):  # 查询单个数据
        return self.connection.execute(sql).fetchone()

    def upd(self, sql):  # 修改单个数据
        return self.connection.execute(sql)

    def dlt(self, sql):  # 删除数据
        return self.connection.execute(sql)

    def commit(self):
        self.connection.commit()  # 提交
        self.connection.remove()  # 结束会话
2.1.2 表结构

2.1.3 新增数据
mysql_session = MysqlSession()
connection = mysql_session.get_connection()
table_name = 'test.user'  # 表名(这里是数据库名+表名)
# 新增数据,返回的该条数据的id
name_remark = [
    {'name': 'Alice', 'remark': '可能是个女生'},
    {'name': 'Bob', 'remark': "可能是个男生"},
    {'name': 'Tammi'}
]
new_ids = []
for p in name_remark:
    name = p.get('name')
    remark = p.get('remark')
    sql = f"""insert into {table_name} (name,remark) values ('{name}','{remark}')"""
    user_id = mysql_session.ins(sql)
    new_ids.append(user_id)
print(new_ids)
mysql_session.commit()
2.1.4 查看数据
# 查看所有数据
sql = f"""select * from {table_name}"""
users = mysql_session.arr(sql)
for u in users:
    print(u)
# 查看指定数据
sql = f"""select * from {table_name} where name='Alice'"""
user = mysql_session.obj(sql)
print(user)

2.1.5 修改数据
# 修改指定数据
sql = f"""update {table_name} set name='Alice_changed' where id=16"""
mysql_session.upd(sql)
mysql_session.commit()
# 查看刚才修改的数据
sql = f"""select * from {table_name} where id=16 """
user = mysql_session.obj(sql)
print(user)

2.1.6 删除数据
# 删除指定数据
sql = f"""delete from {table_name} where id=16"""
mysql_session.dlt(sql)
mysql_session.commit()
# 查看所有数据
users = show_test(mysql_session, table_name)
print(users)

2.2方式二:orm对象关系映射

因为现目前工作中没有用到这个(以前用django的时候有用到过orm),这里就简单记录一下测试情况。

2.2.1 mysql连接

mysql_session.py

import sqlalchemy
from sqlalchemy.orm import sessionmaker

USERNAME = "root"  # 用户名
PASSWORD = "123456"  # 密码
ADDR = "localhost"  # 连接地址 本地localhost 服务器就是服务器的地址XXX
PORT = "3306"  # mysql端口号
DATABASE = "test"  # 连接的数据库名


class MysqlSession:
    def __init__(self):
        self.create_connection()

    def create_connection(self):
        self.engine = sqlalchemy.create_engine(
            f"mysql+pymysql://{USERNAME}:{PASSWORD}@{ADDR}:{PORT}/{DATABASE}?charset=utf8",
            max_overflow=50,  # 超过连接池大小外最多创建的连接
            pool_size=50,  # 连接池大小
            pool_recycle=30,  # 多久之后对线程池中的线程进行一次连接的回收(重置),
            echo=False
        )
        Session = sessionmaker(bind=self.engine)
        self.session = Session()

    def get_session(self):
        return self.session

    def get_engine(self):
        return self.engine
2.2.2 创建表

models.py

from sqlalchemy import Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base

from mysql_session import MysqlSession

Base = declarative_base()


class User(Base):
    __tablename__ = 'person'

    id = Column(Integer, primary_key=True, autoincrement=True)  # 主键 自增
    name = Column(String(255))
    age = Column(Integer)


engine = MysqlSession().get_engine()
Base.metadata.create_all(engine) #创建上面的表,运行一次即可

2.2.3 新增数据
from models import Person
from mysql_session import MysqlSession

session = MysqlSession().get_session()

# 新增几条数据
new_user = Person(name='张三', age=30)
session.add(new_user)
new_user = Person(name='李四', age=40)
session.add(new_user)
new_user = Person(name='王五', age=50)
session.add(new_user)
session.commit()
2.2.4 查询数据
# 查询所有数据
users = session.query(Person).all()
for user in users:
    print(user.name, user.age)
print("**************************************")
# 指定信息
user = session.query(Person).filter_by(name='李四').first()
print(user.name, user.age)

2.2.5 修改数据
# 修改数据
user = session.query(Person).filter_by(name='李四').first()
if user:
    user.age = 400  # 将年龄修改为400
    session.commit()
    print("updated success.")
    print(user.name, user.age)
else:
    print("not found.")

2.2.6 删除数据
# 删除所有年龄大于100的用户
users = session.query(Person).filter(Person.age > 100).all()
for u in users:
    print(u.name, u.age)
for user in users:
    session.delete(user)
session.commit()

  • 6
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 答:Python操作MySQL创建表并增删改查的类可以使用SQLAlchemy库来实现。SQLAlchemy可以帮助你使用Python编写MySQL数据库操作的类,包括创建表、增加、删除和修改数据等操作。 ### 回答2: 下面是一个使用Python操作MySQL数据库进行表的创建、增加、删除、修改和查询的示例代码: ```python import mysql.connector class MySQLDatabase: def __init__(self, host, user, password, database): self.host = host self.user = user self.password = password self.database = database self.connection = None def connect(self): self.connection = mysql.connector.connect( host=self.host, user=self.user, password=self.password, database=self.database ) def create_table(self, table_name, columns): self.connect() cursor = self.connection.cursor() query = "CREATE TABLE {} ({})".format(table_name, columns) cursor.execute(query) self.connection.commit() cursor.close() self.connection.close() def insert_data(self, table_name, data): self.connect() cursor = self.connection.cursor() query = "INSERT INTO {} VALUES ({})".format(table_name, data) cursor.execute(query) self.connection.commit() cursor.close() self.connection.close() def delete_data(self, table_name, condition): self.connect() cursor = self.connection.cursor() query = "DELETE FROM {} WHERE {}".format(table_name, condition) cursor.execute(query) self.connection.commit() cursor.close() self.connection.close() def update_data(self, table_name, set_data, condition): self.connect() cursor = self.connection.cursor() query = "UPDATE {} SET {} WHERE {}".format(table_name, set_data, condition) cursor.execute(query) self.connection.commit() cursor.close() self.connection.close() def select_data(self, table_name, columns="*", condition=""): self.connect() cursor = self.connection.cursor() query = "SELECT {} FROM {} WHERE {}".format(columns, table_name, condition) cursor.execute(query) result = cursor.fetchall() cursor.close() self.connection.close() return result ``` 上述代码中,我们首先定义了一个`MySQLDatabase`类,它需要传入MySQL主机地址、用户名、密码和要操作的数据库名作为参数。该类中包含了连接数据库、创建表、添加数据、删除数据、修改数据和查询数据的方法。 在使用时,可以通过实例化`MySQLDatabase`类,并调用类中的方法来操作MySQL数据库。例如创建一个名为`students`的表: ```python db = MySQLDatabase("localhost", "root", "password", "test") db.create_table("students", "id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255), age INT") ``` 然后插入一条数据到`students`表: ```python db.insert_data("students", "DEFAULT, 'John', 20") ``` 之后可以进行更新、删除和查询等操作: ```python db.update_data("students", "age = 21", "name = 'John'") db.delete_data("students", "age <= 20") result = db.select_data("students", "id, name", "age >= 21") ``` 注意:上述代码仅为示例,实际使用时需要根据实际情况对参数进行适当修改和验证。 ### 回答3: 下面是一个使用Python操作MySQL数据库进行创建表、增删改查的示例class: ```python import mysql.connector class MySQLTable: def __init__(self, host, username, password, database): self.host = host self.username = username self.password = password self.database = database self.conn = mysql.connector.connect( host=self.host, user=self.username, password=self.password, database=self.database ) self.cursor = self.conn.cursor() def create_table(self, table_name, columns): sql = f"CREATE TABLE {table_name} ({columns})" self.cursor.execute(sql) self.conn.commit() print(f"Table {table_name} created successfully") def insert_data(self, table_name, values): sql = f"INSERT INTO {table_name} VALUES {values}" self.cursor.execute(sql) self.conn.commit() print("Data inserted successfully") def update_data(self, table_name, set_values, condition): sql = f"UPDATE {table_name} SET {set_values} WHERE {condition}" self.cursor.execute(sql) self.conn.commit() print("Data updated successfully") def delete_data(self, table_name, condition): sql = f"DELETE FROM {table_name} WHERE {condition}" self.cursor.execute(sql) self.conn.commit() print("Data deleted successfully") def fetch_data(self, table_name, condition=""): if condition: sql = f"SELECT * FROM {table_name} WHERE {condition}" else: sql = f"SELECT * FROM {table_name}" self.cursor.execute(sql) result = self.cursor.fetchall() if result: for row in result: print(row) else: print("No data found") def close_connection(self): self.cursor.close() self.conn.close() print("Connection closed") ``` 使用示例: ```python # 实例化MySQLTable对象 mysql_table = MySQLTable("localhost", "root", "password", "mydatabase") # 创建表 mysql_table.create_table("students", "id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255), age INT") # 插入数据 mysql_table.insert_data("students", "(1, 'John', 20)") # 更新数据 mysql_table.update_data("students", "name = 'Mike'", "id = 1") # 删除数据 mysql_table.delete_data("students", "name = 'Mike'") # 查询数据 mysql_table.fetch_data("students", "age > 18") # 关闭连接 mysql_table.close_connection() ``` 以上是一个基本的示例,可以根据实际需要进行修改和扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值