上海古都建筑设计集团,上海办公室装修设计公司,上海装修公司高质量的内容分享社区,上海装修公司我们不是内容生产者,我们只是上海办公室装修设计公司内容的搬运工平台

python中的pymssql操作MSSQL数据库

guduadmin14小时前

在Python中,pymssql是一个用于与Microsoft SQL Server数据库进行交互的第三方库。pymssql提供了连接到数据库、执行SQL查询、插入、更新和删除数据等功能。下面我将详细介绍如何使用pymssql进行MSSQL数据库操作。

安装pymssql库 首先,确保你的Python环境已经安装了pymssql库。你可以使用pip工具进行安装

pip install pymssql

  • 插入、更新和删除数据

    使用pymssql库,你可以执行插入、更新和删除数据的操作。 

    import pymssql
    # 连接参数
    server = 'server_name'
    database = 'database_name'
    username = 'username'
    password = 'password'
    # 建立连接
    conn = pymssql.connect(server=server, database=database, user=username, password=password)
    # 创建游标对象
    cursor = conn.cursor()
    # 执行SQL查询
    cursor.execute("SELECT * FROM your_table")
    # 获取查询结果
    result = cursor.fetchall()
    # 遍历结果
    for row in result:
        print(row)
    # 插入数据
    insert_query = "INSERT INTO your_table (column1, column2) VALUES (%s, %s)"
    insert_data = ('value1', 'value2')
    cursor.execute(insert_query, insert_data)
    # 更新数据
    update_query = "UPDATE your_table SET column1 = %s WHERE id = %s"
    update_data = ('new_value', 1)
    cursor.execute(update_query, update_data) #参数化查询
    # 删除数据
    delete_query = "DELETE FROM your_table WHERE id = %s"
    delete_data = (1,)
    cursor.execute(delete_query, delete_data)
    # 提交事务
    conn.commit()
    # 关闭游标
    cursor.close()
    
    •  管理事务

      以确保一组数据库操作要么全部成功,要么全部回滚。 

      # 创建游标对象
      cursor = conn.cursor()
      try:
          # 开始事务
          conn.begin()
          # 执行数据库操作
          cursor.execute("INSERT INTO your_table (column1, column2) VALUES ('value1', 'value2')")
          cursor.execute("UPDATE your_table SET column1 = 'new_value' WHERE id = 1")
          # 提交事务
          conn.commit()
      except Exception as e:
          # 回滚事务
          conn.rollback()
          print("Error:", e)
      # 关闭游标
      cursor.close()
      
      • 查询结果处理

        # pymssql返回的查询结果是一个元组列表,其中每个元组表示一行数据。你可以通过遍历查询结果来逐行处理数据。 

        # 查询结果处理
        # pymssql返回的查询结果是一个元组列表,其中每个元组表示一行数据。你可以通过遍历查询结果来逐行处理数据。
        # 创建游标对象
        cursor = conn.cursor()
        # 执行查询
        cursor.execute("SELECT column1, column2 FROM your_table")
        # 获取查询结果
        result = cursor.fetchall()
        # 遍历结果
        for row in result:
            column1_value = row[0]
            column2_value = row[1]
            # 处理数据
        # 关闭游标
        cursor.close()
        •  处理大型结果集

          如果查询结果集非常大,无法一次性全部加载到内存中,可以使用pymssql提供的fetchone()和fetchmany()方法来逐步获取结果集的数据。

          # 创建游标对象
          cursor = conn.cursor()
          # 执行查询
          cursor.execute("SELECT column1, column2 FROM your_table")
          # 获取一条记录
          row = cursor.fetchone()
          while row:
              # 处理数据
              print(row)
              # 获取下一条记录
              row = cursor.fetchone()
          # 关闭游标
          cursor.close()
          

           

          •  批量插入数据

            # 如果你需要插入大量数据到数据库,一次插入一行可能效率较低。pymssql允许你使用executemany()方法进行批量插入,一次插入多行数据。

            # 批量插入数据
            # 如果你需要插入大量数据到数据库,一次插入一行可能效率较低。pymssql允许你使用executemany()方法进行批量插入,一次插入多行数据。
            # 创建游标对象
            cursor = conn.cursor()
            # 准备插入数据
            data = [('value1', 'value2'),
                    ('value3', 'value4'),
                    ('value5', 'value6')]
            # 执行批量插入
            insert_query = "INSERT INTO your_table (column1, column2) VALUES (%s, %s)"
            cursor.executemany(insert_query, data)
            # 提交事务
            conn.commit()
            # 关闭游标
            cursor.close()
            
            •  存储过程调用

              # pymssql也支持调用MSSQL数据库中的存储过程。你可以使用execute_proc()方法来执行存储过程。

              # 存储过程调用
              # pymssql也支持调用MSSQL数据库中的存储过程。你可以使用execute_proc()方法来执行存储过程。
              # 创建游标对象
              cursor = conn.cursor()
              # 执行存储过程
              cursor.execute_proc('your_stored_procedure_name', ('param1', 'param2'))
              # 获取结果
              result = cursor.fetchall()
              # 关闭游标
              cursor.close()
              
              •  分页查询

                当处理大量数据时,分页查询是一种常见的需求。可以使用pymssql的OFFSET和FETCH语句来实现分页查询。通过调整page_size和page_number参数,可以获取指定页数的数据。

                # 定义分页参数
                page_size = 10
                page_number = 1
                # 执行分页查询
                query = f"SELECT column1, column2 FROM your_table ORDER BY column1 OFFSET {page_size * (page_number - 1)} ROWS FETCH NEXT {page_size} ROWS ONLY"
                cursor.execute(query)
                result = cursor.fetchall()
                for row in result:
                    # 处理数据
                
                # 创建游标对象
                cursor = conn.cursor()
                # 定义分页查询语句
                page_size = 10  # 每页的记录数
                page_number = 1  # 页码
                offset = (page_number - 1) * page_size  # 计算偏移量
                query = f"SELECT column1, column2 FROM your_table ORDER BY column1 OFFSET {offset} ROWS FETCH NEXT {page_size} ROWS ONLY"
                # 执行分页查询
                cursor.execute(query)
                # 处理查询结果
                result = cursor.fetchall()
                for row in result:
                    # 处理数据
                # 关闭游标
                cursor.close()
                

                 

                • 处理数据库连接错误

                  在连接数据库时,可能会遇到连接错误。可以通过捕获pymssql库引发的pymssql.OperationalError异常来处理连接错误。 

                  import pymssql
                  try:
                      conn = pymssql.connect(server='server_name', database='database_name', user='username', password='password')
                      # 连接成功,执行数据库操作
                      cursor = conn.cursor()
                      # 执行查询、插入、更新等操作
                      # ...
                      conn.commit()
                      cursor.close()
                      conn.close()
                  except pymssql.OperationalError as e:
                      # 处理连接错误
                      print("Connection Error:", e)
                  
                  import pymssql
                  try:
                      # 连接数据库
                      conn = pymssql.connect(server='server_name', database='database_name', user='username', password='password')
                      # 执行数据库操作
                      cursor = conn.cursor()
                      cursor.execute("SELECT column1, column2 FROM your_table")
                      result = cursor.fetchall()
                      # 处理查询结果
                      for row in result:
                          # 处理数据
                  except pymssql.Error as e:
                      print("Database Error:", e)
                  finally:
                      # 关闭连接
                      if conn:
                          conn.close()
                  
                  • 获取查询结果的列信息

                    如果你需要获取查询结果的列信息,如列名、数据类型等,可以使用cursor.description属性。

                    # 创建游标对象
                    cursor = conn.cursor()
                    # 执行查询
                    cursor.execute("SELECT column1, column2 FROM your_table")
                    # 获取列名
                    column_names = [column[0] for column in cursor.description]
                    # 获取列类型
                    column_types = [column[1] for column in cursor.description]
                    # 处理查询结果
                    result = cursor.fetchall()
                    for row in result:
                        for name, value in zip(column_names, row):
                            print(f"{name}: {value}")
                    # 关闭游标
                    cursor.close()
                    
                    •  处理查询结果中的NULL值

                      在查询结果中,某些列的值可能为NULL。pymssql将NULL值表示为Python中的None。你可以使用条件语句来处理查询结果中的NULL值。

                      cursor.execute("SELECT column1, column2 FROM your_table")
                      result = cursor.fetchall()
                      for row in result:
                          column1_value = row[0] if row[0] is not None else 'N/A'
                          column2_value = row[1] if row[1] is not None else 'N/A'
                          # 处理数据
                      
                      •  执行存储过程并获取输出参数

                        如果你需要执行MSSQL数据库中的存储过程,并获取输出参数的值,可以使用pymssql提供的callproc()方法。使用callproc()方法执行名为your_stored_procedure_name的存储过程,并传递参数param1和param2。然后,可以使用getoutputparams()方法获取输出参数的值。

                        # 创建游标对象
                        cursor = conn.cursor()
                        # 执行存储过程
                        cursor.callproc('your_stored_procedure_name', (param1, param2))
                        # 获取输出参数的值
                        output_param1 = cursor.getoutputparams()[0]
                        output_param2 = cursor.getoutputparams()[1]
                        # 关闭游标
                        cursor.close()
                        
                        •  批量更新数据

                          如果你需要批量更新数据库中的数据,可以使用pymssql的executemany()方法。

                          # 创建游标对象
                          cursor = conn.cursor()
                          # 定义更新语句和数据
                          update_query = "UPDATE your_table SET column1 = %s WHERE id = %s"
                          data = [('new_value1', 1), ('new_value2', 2), ('new_value3', 3)]
                          # 执行批量更新
                          cursor.executemany(update_query, data)
                          # 提交事务
                          conn.commit()
                          # 关闭游标
                          cursor.close()
                          
                          •  使用with语句自动管理连接和事务

                            使用with语句可以更方便地管理数据库连接和事务,确保资源的正确释放和事务的提交或回滚。

                            # 使用with语句管理连接和事务
                            with pymssql.connect(server='server_name', database='database_name', user='username', password='password') as conn:
                                # 创建游标对象
                                cursor = conn.cursor()
                                try:
                                    # 执行数据库操作
                                    cursor.execute("INSERT INTO your_table (column1, column2) VALUES ('value1', 'value2')")
                                    cursor.execute("UPDATE your_table SET column1 = 'new_value' WHERE id = 1")
                                    # 提交事务
                                    conn.commit()
                                except Exception as e:
                                    # 回滚事务
                                    conn.rollback()
                                    print("Error:", e)
                                # 关闭游标
                                cursor.close()
                            
                            •  异步操作

                              如果你需要执行异步的MSSQL数据库操作,pymssql提供了对异步IO的支持。可以使用pymssql.connect()的asynchronous=True参数来创建异步连接,以及cursor.execute()的as_dict=True参数来执行异步查询并返回字典格式的结果。使用asyncio模块创建了一个异步的主函数main(),在其中创建了异步连接和游标,并执行了异步查询。最后,我们使用事件循环运行异步任务。

                              import asyncio
                              import pymssql
                              async def main():
                                  # 创建异步连接
                                  conn = await pymssql.connect(server='server_name', database='database_name', user='username', password='password', asynchronous=True)
                                  # 创建异步游标
                                  cursor = conn.cursor(as_dict=True)
                                  # 执行异步查询
                                  await cursor.execute("SELECT * FROM your_table")
                                  # 获取结果
                                  result = await cursor.fetchall()
                                  # 处理查询结果
                                  for row in result:
                                      # 处理数据
                                  # 关闭游标和连接
                                  await cursor.close()
                                  await conn.close()
                              # 创建事件循环并运行异步任务
                              loop = asyncio.get_event_loop()
                              loop.run_until_complete(main())
                              
                              • 使用连接池

                                连接池是一种用于管理数据库连接的技术,它可以提高应用程序的性能和可扩展性。pymssql支持使用连接池来管理数据库连接。使用连接池可以减少连接的创建和销毁开销,并提供连接的复用,从而提高应用程序的性能和可扩展性。

                                from pymssql import pool
                                # 创建连接池
                                pool = pool.ConnectionPool(server='server_name', database='database_name', user='username', password='password', max_connections=5)
                                # 从连接池获取连接
                                conn = pool.get_connection()
                                # 执行数据库操作
                                cursor = conn.cursor()
                                cursor.execute("SELECT * FROM your_table")
                                result = cursor.fetchall()
                                # 处理查询结果
                                for row in result:
                                    # 处理数据
                                # 关闭游标和连接
                                cursor.close()
                                conn.close()
                                

网友评论

搜索
最新文章
热门文章
热门标签