下面的代码主要实现了九个功能:列出图书、添加图书、更新图书信息、删除图书、搜索图书、搜索图书(按作者)、搜索图书(按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 数据库的交互。这些代码适用于需要基本图书和用户管理功能的场景,还可以实现一些高级的功能,如用户身份验证、更复杂的查询或图形用户界面。