使用python代码连接MySQL数据库(控制台)

下面的代码主要实现了九个功能:列出图书、添加图书、更新图书信息、删除图书、搜索图书、搜索图书(按作者)、搜索图书(按ISBN)、列出所有用户、添加用户,这一些基础功能。以下是详细的代码以及操作步骤:

1、首先要在python上安装相对应的库

pip install pymyqsl

2、导入相对应的库

import pymysql
from pymysql.cursors import DictCursor

3、安装完成后要连接数据库

DB_CONFIG = {
    'host': '127.0.0.1',
    # 如果是本机的数据库则使用本机的IP地址,如果是服务器则填写服务器MySQL数据库IP
    'user': 'root',
    # 登入数据库的用户名
    'password': 'password',
    # 登入数据库的密码
    'database': 'library_db',
    # 数据库的名称
    'charset': 'utf8mb4',
    # 数据库连接时使用的字符集
    'cursorclass': DictCursor
    # 数据库的接口
}

4、初始化连接数据库

# 初始化连接数据库
def init_db():
    connection = pymysql.connect(**DB_CONFIG)
    return connection

5、然后要开始定义图书管理

# 定义图书管理类
class BookManager:
    def __init__(self, connection):
        self.connection = connection
        self.cursor = self.connection.cursor()
    # 创建一个游标对象,用于执行 SQL 语句。

    def create_table(self):
        sql = """
        CREATE TABLE IF NOT EXISTS books (
            id INT AUTO_INCREMENT PRIMARY KEY,
            title VARCHAR(255) NOT NULL,
            author VARCHAR(255) NOT NULL,
            published_year INT,
            isbn VARCHAR(20),
            quantity INT DEFAULT 0
        )
        """
        self.cursor.execute(sql)
        self.connection.commit()
    # 创建表

    def add_book(self, title, author, published_year, isbn, quantity):
        sql = "INSERT INTO books (title, author, published_year, isbn, quantity) VALUES (%s, %s, %s, %s, %s)"
        self.cursor.execute(sql, (title, author, published_year, isbn, quantity))
        self.connection.commit()
    # 添加图书

    def list_books(self):
        sql = "SELECT * FROM books"
        self.cursor.execute(sql)
        return self.cursor.fetchall()
    # 列出图书

    def find_book(self, title_pattern):
        sql = "SELECT * FROM books WHERE title LIKE %s"
        self.cursor.execute(sql, ('%' + title_pattern + '%'))
        return self.cursor.fetchall()
    # 按书名查找

    def find_books_by_author(self, author_pattern):
        sql = "SELECT * FROM books WHERE author LIKE %s"
        self.cursor.execute(sql, ('%' + author_pattern + '%'))
        return self.cursor.fetchall()
    # 按作者查找

    def find_books_by_isbn(self, isbn_pattern):
        sql = "SELECT * FROM books WHERE isbn LIKE %s"
        self.cursor.execute(sql, ('%' + isbn_pattern + '%'))
        return self.cursor.fetchall()
    # 按ISBN查找

    def update_book(self, book_id, title=None, author=None, published_year=None, isbn=None, quantity=None):
        sets = []
        args = [book_id]
        if title:
            sets.append("title=%s")
            args.append(title)
        if author:
            sets.append("author=%s")
            args.append(author)
        if published_year:
            sets.append("published_year=%s")
            args.append(published_year)
        if isbn:
            sets.append("isbn=%s")
            args.append(isbn)
        if quantity is not None:
            sets.append("quantity=%s")
            args.append(quantity)
        sql = "UPDATE books SET " + ", ".join(sets) + " WHERE id=%s"
        self.cursor.execute(sql, args)
        self.connection.commit()
    # 更新图书

    def delete_book(self, book_id):
        sql = "DELETE FROM books WHERE id=%s"
        self.cursor.execute(sql, (book_id,))
        self.connection.commit()
    # 删除图书

    def close(self):
        self.cursor.close()
        self.connection.close()
    # 关闭连接

6、定义用户管理类

# 定义用户管理类
class UserManager:
    def __init__(self, connection):
        self.connection = connection
        self.cursor = self.connection.cursor()

    def create_user_table(self):
        sql = """
        CREATE TABLE IF NOT EXISTS users (
            id INT AUTO_INCREMENT PRIMARY KEY,
            name VARCHAR(255) NOT NULL,
            contact_info VARCHAR(255)
        )
        """
        self.cursor.execute(sql)
        self.connection.commit()
    # 创建用户表

    def add_user(self, name, contact_info):
        sql = "INSERT INTO users (name, contact_info) VALUES (%s, %s)"
        self.cursor.execute(sql, (name, contact_info))
        self.connection.commit()
    # 添加用户

    def list_users(self):
        sql = "SELECT * FROM users"
        self.cursor.execute(sql)
        return self.cursor.fetchall()
    # 列出用户

    def close(self):
        self.cursor.close()
        self.connection.close()

7、接下来就是调用和控制台的互动

# 主程序
def main():
    connection = init_db()
    # 调用 init_db 函数

    try:
        book_manager = BookManager(connection)
        user_manager = UserManager(connection)

        book_manager.create_table()
        user_manager.create_user_table()

        while True:
            print("\n图书管理菜单:")
            print("1. 列出图书")
            print("2. 添加图书")
            print("3. 更新图书信息")
            print("4. 删除图书")
            print("5. 搜索图书")
            print("6. 搜索图书(按作者)")
            print("7. 搜索图书(按ISBN)")
            print("用户管理菜单:")
            print("8. 列出所有用户")
            print("9. 添加用户")
            print("10. 退出")

            choice = input("请输入选项:")

            if choice == '1':
                books = book_manager.list_books()
                for book in books:
                    print(book)
            elif choice == '2':
                title = input("输入书名:")
                author = input("输入作者:")
                published_year = input("输入出版年份:")
                isbn = input("输入ISBN:")
                quantity = int(input("输入数量:"))
                book_manager.add_book(title, author, published_year, isbn, quantity)
            elif choice == '3':
                book_id = int(input("输入要更新的图书ID:"))
                title = input("输入新书名(留空跳过):").strip() or None
                author = input("输入新作者(留空跳过):").strip() or None
                published_year = input("输入新的出版年份(留空跳过):").strip() or None
                isbn = input("输入新的ISBN(留空跳过):").strip() or None
                quantity = input("输入新的数量(留空跳过):").strip()
                book_manager.update_book(book_id, title=title, author=author, published_year=published_year, isbn=isbn, quantity=(int(quantity) if quantity else None))
            elif choice == '4':
                book_id = int(input("输入要删除的图书ID:"))
                book_manager.delete_book(book_id)
            elif choice == '5':
                title_pattern = input("输入书名搜索模式(使用%作为通配符):")
                books = book_manager.find_book(title_pattern)
                for book in books:
                    print(book)
            elif choice == '6':
                author_pattern = input("输入作者名搜索模式(使用%作为通配符):")
                books = book_manager.find_books_by_author(author_pattern)
                for book in books:
                    print(book)
            elif choice == '7':
                isbn_pattern = input("输入ISBN搜索模式(使用%作为通配符):")
                books = book_manager.find_books_by_isbn(isbn_pattern)
                for book in books:
                    print(book)
            elif choice == '8':
                users = user_manager.list_users()
                for user in users:
                    print(user)
            elif choice == '9':
                name = input("输入用户姓名:")
                contact_info = input("输入联系方式:")
                user_manager.add_user(name, contact_info)
            elif choice == '10':
                break
            else:
                print("无效的选项,请重新输入。")

    except Exception as e:
        print(f"发生错误:{e}")
    finally:
        book_manager.close()
        user_manager.close()
    # 不管是否发生异常,都会执行 finally 块中的代码,用于关闭数据库游标和连接,释放资源。

if __name__ == "__main__":
    main()

这些代码构成了一个简单的图书和用户管理系统,使用 Python 语言编写,并使用 pymysql 库来实现与 MySQL 数据库的交互。这些代码适用于需要基本图书和用户管理功能的场景,还可以实现一些高级的功能,如用户身份验证、更复杂的查询或图形用户界面。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值