Python操作数据库方法总结

本文详细介绍Python操作数据库的全过程,涵盖数据库连接、游标生成、SQL执行、结果获取及关闭操作,适用于MySQL和SQLServer,包括常见操作如创建表、插入、查询、更新和删除。

方法概括

Python操作数据库可以使用第三方库,Python操作数据库方法可以概括为5个步骤,总结如下:

  1. 连接数据库

    1)python连接数据库之前,需要满足以下条件:

    • 当前系统已安装python环境;
    • 被连接的数据库已创建;
    • 当前系统已安装python 第三方库。

    2)连接数据库需要用到的参数包括:
    (“主机:host,端口:port,用户名:user,密码:password,指定数据库:db,指定字符集:charset)
    例如:

    db_connect = pymysql.connect(host='localhost', port=3306, user='root', password='111111', db='database', charset='utf8')
    

    数据库连接成功后,会得到一个db对象

  2. 生成游标对象

    通过db对象,使用db.cursor()方法得到一个游标,游标可以用来执行sql语句;
    例如:cursor=db_connect.cursor()
    或者 给cursor添加一个参数,让其返回的数据是一个字典

    cursor = db_connect.cursor(cursor=pymysql.cursors.DictCursor)
    
  3. 执行SQL语句

    准备sql语句并执行sql语句

    sql = 'select * from star'
    

    返回结果rows是受影响的数据行数

    rows = cursor.execute(sql)
    db_connect.commit()
    
  4. 关闭游标
    cursor.close()
    
  5. 关闭连接
    db_connect.close()
    
  6. 常见数据库操作总结
    • a 创建表操作
      create_table_sql = “CREATE TABLE IF NOT EXISTS Students(id INT(10) NOT NULL AUTO_INCREMENT,name VARCHAR(100) NOT NULL,age INT(5) NOT NULL,sex VARCHAR(10) NOT NULL,PRIMARY KEY ( id )) DEFAULT CHARSET=utf8;”

    • b 插入数据

      insert_sql = "INSERT INTO Students ( id,name, age,sex) VALUES ( 1, '王伟',12,'男' ),( 2,'小妹' ,11,'女' ),( 3,'海涛' ,10,'男' );"
      
    • c 查询操作

      select_sql = "select  * from Students;"
      select_sql2 = "select  * from Students where id =3;"
      

      Python查询Mysql使用 fetchone() 方法获取单条数据, 使用fetchall() 方法获取多条数据。
      • fetchone(): 该方法获取下一个查询结果集。结果集是一个对象
      • fetchall(): 接收全部的返回结果行.
      • rowcount: 这是一个只读属性,并返回执行execute()方法后影响的行数。
      results = cursor.fetchall()# 获取所有记录列表

    • d 更新操作

      update_sql = "UPDATE Students SET age=11 WHERE id=3;"
      
    • e 删除操作

      delete_sql = "DELETE FROM Students WHERE id=1;"
      

python操作MySQL数据库

  1. 安装第三方库 PyMySQL

    直接使用 pip install pymysql即可

  2. 实现过程:

    mysql.py

    #!/usr/bin/python
    # -*- coding: utf-8 -*-
     
    import pymysql
    connection = pymysql.connect(host='127.0.0.1', port=3306, user='root', password='123456', db='database', charset='utf8')
    if connection:
    	print "连接成功"
    cursor = connection.cursor()
    
    cursor.execute("DROP TABLE IF EXISTS Students")  # 如果数据表已经存在使用 execute() 方法删除表。
    
    create_table_sql = "CREATE TABLE IF NOT EXISTS Students(id INT(10) NOT NULL AUTO_INCREMENT,name VARCHAR(100) NOT NULL,age INT(5) NOT NULL,sex VARCHAR(10) NOT NULL,PRIMARY KEY ( id )) DEFAULT CHARSET=utf8;"
    insert_sql = "INSERT INTO Students ( id,name, age,sex) VALUES ( 1, '王伟',12,'男' ),( 2,'小妹' ,11,'女' ),( 3,'海涛' ,10,'男' );"
    select_sql = "select  * from Students;"
    update_sql = "UPDATE Students SET age=11 WHERE id=3;"
    select_sql2 = "select  * from Students where id =3;"
    delete_sql = "DELETE FROM Students WHERE id=1;"
    drop_sql = "DROP TABLE Students;"
    
    sql = [create_table_sql,insert_sql,select_sql,update_sql,select_sql2,delete_sql,drop_sql]
    try:
    	for i in range(len(sql)):		
    	       cursor.execute(sql[i])
    	#print mysql_sql)
    			
    	connection.commit()
    except:
    	connection.rollback()  # 发生错误时回滚
    connection.close()
    

python操作sqlserver数据库

  1. 安装第三方库pymssql

    python使用第三方库pymssql来操作SQLServer数据库,在使用之前需要安装pymssql模块
    1)直接命令行使用 pip install pymssql
    2)若以上安装不成功,从python官网上下载对应python版本的pymssql,下载地址:https://pypi.org/project/pymssql/#files
    例如:windows主机已经安装了python3.7版本,则我选择对应python37的win 64位的pymssql-2.1.4-cp37-cp37m-win_amd64.whl 下载,然后安装 pip install pymssql-2.1.4-cp37-cp37m-win_amd64.whl

  2. 代码实现过程

    sqlserver.py

    #!/usr/bin/python
    # -*- coding: utf-8 -*-
    
    import pymssql
    
    db_connect = pymssql.connect('10.0.0.24', 'qwert','z9gjmP5tNUaVUcX1','dbaudit_sqlserver2008r2')
    if db_connect:
        print("连接成功!")
    
    cursor = db_connect.cursor()
    
    create_table_sql = "CREATE TABLE  Students(id int primary key,name VARCHAR(100) NOT NULL,age INT NOT NULL,sex VARCHAR(10) NOT NULL);"
    insert_sql = "INSERT INTO Students ( id,name, age,sex) VALUES ( 1, '王伟',12,'男' ),( 2,'小妹' ,11,'女' ),( 3,'海涛' ,10,'男' );"
    select_sql = "select  * from Students;"
    update_sql = "UPDATE Students SET age=11 WHERE id=3;"
    select_sql2 = "select  * from Students where id =3;"
    delete_sql = "DELETE FROM Students WHERE id=1;"
    drop_sql = "DROP TABLE Students;"
    
    sql = [create_table_sql,insert_sql,select_sql,update_sql,select_sql2,delete_sql,drop_sql]
    
    tryfor i in range(len(sql)):
    		cursor.execute(sql[i])
    	    # print(sql[i])
    		# print("db commit success") 
    		db_connect.commit()  
    except:
    	db_connect.rollback()  # 发生错误时回滚
    
    cursor.close()   
    db_connect.close()
    
<think>首先,用户的问题是:“我想了解Python操作数据库方法应该放置的位置”。他们提到了引用的内容,但我需要参考之前的对话历史和系统指令。 回顾系统指令: - 所有行内数学表达式用$...$ - 独立公式用$$...$$单独成段 - LaTeX语法正确 - 使用中文回答 - 生成相关问题 - 回答中引用的段落末尾自然地添加引用标识 用户上一次的问题是关于Oracle数据库的引用,但当前问题是关于Python操作数据库方法放置的位置。 之前的对话: - 用户引用了两个引用:[1]是关于Python操作Oracle数据库,提到操作MySQL数据库类似。[2]是关于Python操作数据库项目实例,读取配置文件建立连接。 当前用户问题:"我想了解Python操作数据库方法应该放置的位置",意思是询问在Python项目中,操作数据库方法应该放在代码中的哪个位置。 我需要根据用户的问题和引用内容来回答。 引用内容: - [^1]:Python操作Oracle数据库,类似于操作MySQL,提供了链接。提到Python链接Oracle服务器的3种方式。 - [^2]:Python操作数据库项目实例,导入pymysql库,将连接功能写入自建类,读取配置文件获得参数。 用户的问题是“方法放置的位置”,所以焦点是在代码结构上,方法应该放在哪里。 可能的回答方向: - 在Python项目中,操作数据库方法通常封装在类或单独的模块中,以提高代码复用性和可维护性。 - 引用[2]提到将连接功能写入自建类,并通过配置文件读取参数。 - 最佳实践是:使用面向对象编程(OOP),将数据库操作封装在类中;或者使用ORM(对象关系映射)库;或者放在单独的模块文件中。 具体位置: - 可以放在一个单独的Python文件(如db_handler.py)中作为模块。 - 在类中定义方法,例如DatabaseHandler类包含连接、查询等方法。 - 避免直接在脚本中写数据库操作,以减少耦合。 参考引用[2]:它说“导入pymysql库,将库的连接等功能写入自建类”,意思是创建一个自定义类来处理数据库操作。 所以,我应该建议: - 创建一个专门的类或模块来放置数据库操作方法。 - 例如,定义一个Database类,有connect、execute_query、close等方法。 - 位置:在项目结构中,通常放在一个服务层或工具模块中。 回答结构: - 结构清晰,逐步解决问题。 - 使用中文。 - 末尾自然地添加引用标识。 - 生成相关问题。 最终回答: 1. 解释方法放置的位置:建议封装在类或模块中。 2. 给出简单代码示例(如引用中的)。 3. 添加引用标识。 4. 生成相关问题。 代码示例可以使用引用[2]中的概念。 生成相关问题: - 基于主题,如如何封装数据库操作、最佳实践等。 完整回答: - 开头解释。 - 详细说明位置。 - 代码示例。 - 引用标识。 - 相关问题。 </think>### Python操作数据库方法放置位置 在Python项目中,将数据库操作方法放置在合适的位置至关重要,这能提高代码的可维护性、复用性和健壮性。根据最佳实践和引用内容中的实例,数据库操作方法通常应封装在自定义类和独立的模块中,而不是直接写在主脚本或函数中。以下是详细解释和步骤: #### 1. **为什么需要封装数据库操作方法?** - **解耦和复用**:将数据库操作封装后,可以减少代码重复,便于在不同模块调用。 - **安全性和可配置性**:通过类或模块管理连接参数(如从配置文件读取),避免硬编码敏感信息(如密码)。 - 引用[2]中强调,通过自建类处理连接等功能,并读取.cfg配置文件获取连接参数,提升了代码的灵活性和项目可维护性[^2]。 #### 2. **推荐的放置位置** - **在自定义类中定义方法**:创建一个专门的类(如`DatabaseHandler`),将连接、查询、插入等方法封装在类中。类可以放置在项目的一个独立文件中(如`db_utils.py`)。 - **优点**:遵循面向对象编程(OOP)原则,支持参数化配置和错误处理。 - **示例代码(基于引用[2]的概念)**: ```python # 文件名:db_utils.py import pymysql # 或使用 cx_Oracle 操作 Oracle 数据库,类似引用[1]的原理[^1] class DatabaseHandler: def __init__(self, config_path='config.cfg'): # 从配置文件读取参数(引用[2]的方法) self.config = self.load_config(config_path) self.connection = self.connect() def load_config(self, path): # 读取配置文件,返回字典如 {'host': 'localhost', 'user': 'root', ...} # 实际代码需根据 .cfg 文件解析 return {'host': 'localhost', 'user': 'root', 'password': 'pass', 'db': 'testdb'} def connect(self): # 建立数据库连接 return pymysql.connect( host=self.config['host'], user=self.config['user'], password=self.config['password'], database=self.config['db'] ) def execute_query(self, query): # 执行查询操作 with self.connection.cursor() as cursor: cursor.execute(query) return cursor.fetchall() def close(self): # 关闭连接 self.connection.close() # 在其他文件中使用时: # from db_utils import DatabaseHandler # db = DatabaseHandler() # results = db.execute_query("SELECT * FROM tablename") ``` - **放置位置**:将此类文件放在项目根目录下的`utils/`或`services/`文件夹中,作为模块导入主程序。 - **在独立模块中定义函数**:如果不使用类,可以创建一个模块文件(如`database.py`),定义全局函数如`connect_db()`, `run_query()`。 - **优点**:简单快速,适合较小项目。 - **缺点**:扩展性较差,不如类灵活。 - **示例**: ```python # 文件名:database.py import pymysql def connect(config): return pymysql.connect(**config) def query(connection, sql): with connection.cursor() as cursor: cursor.execute(sql) return cursor.fetchall() ``` #### 3. **最佳实践总结** - **避免直接放置在主脚本中**:不要在应用程序入口文件(如`main.py`)中直接写数据库操作逻辑,这会导致代码臃肿且难以测试。 - **使用配置文件**:如引用[2]所示,从`.cfg`或`.env`文件读取数据库参数,确保安全性[^2]。 - **利用ORM工具**:对于复杂项目,可以使用SQLAlchemy或Django ORM,它们自动封装数据库操作。 - **位置建议**: - 小型项目:放在`utils/database.py`文件中。 - 中型项目:创建`app/services/db_service.py`作为服务层。 - 大型项目:使用分层架构(如MVC),数据库操作放在`models/`目录下。 ### 相关问题 1. 如何在Python中使用配置文件管理数据库连接的参数? 2. Python操作数据库时,如何优化连接池以提升性能? 3. 使用ORM(如SQLAlchemy)与直接写SQL语句操作数据库有什么区别?
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值