python操作数据库(cursor游标讲解)
发布日期:2021-05-28 17:08:42 浏览次数:34 分类:精选文章

本文共 7061 字,大约阅读时间需要 23 分钟。

cursor 游标简介

1. database基础知识

数据库是组织、存储和管理数据的存储系统。 cursor(游标) 是数据库操作中重要的概念,用于逐行处理数据库记录。

2. python数据库操作示例

游标的主要作用是执行 SQL 语句后,逐行获取和处理结果集。以下是 Python 中使用 pymysql 实现的 cursor 游标示例:

import pymysqldef database_connect():    db = pymysql.connect(        host='localhost',        user='root',        db='huangwei',        password='123456',        port=3306,        charset='utf8'    )    cursor = db.cursor()    return db, cursordef fetch_data(cursor):    sql = 'select sname, ssex from student'    cursor.execute(sql)    result = cursor.fetchall()    return resultdef process_data(result):    for name, gender in result:        if gender == '女':            print(f"我叫{ name },我是一个学生!")def close_db(db, cursor):    db.close()    cursor.close()def main():    db, cursor = database_connect()    data = fetch_data(cursor)    process_data(data)    close_db(db, cursor)if __name__ == "__main__":    main()

3. database Backup(paranoid)

为了确保数据安全,可以定期执行数据库备份。以下是一个常用的备份命令示例:

mysqldump -u root -p huangwei > database_backup.sql

4. cursor 游标应用

在实际项目中,cursor 游标常用于分批处理大量数据。以下是 cursor 的常见操作示例:

def batch_processing(cursor):    while True:        rows = cursor.fetchmany(100)  # 每次获取100行数据        if not rows:            break        # 处理当前批次数据        for row in rows:            print(row)

5. 源码解析

以下是一些常用的数据库迁移脚本,用于数据持久化和信息迁移:

data_old.py

import cx_Oracledef migratedat():    # 距离数据库连接    ip_db = cx_Oracle.connect(        username='********',        password='********',        ip_address='********'    )        # 目标数据库连接    target_db = pymysql.connect(        host='10.37.6.***',        user='root',        password='*******',        db='enterprise_internet'    )        cursor_select = ip_db.cursor()    cursor_insert = target_db.cursor()        # 执行 SQL 查询    sql = 'SELECT ACC_NUM FROM CUS_INST.XY_PROD_INST@to_crm30db '    sql += 'WHERE PROD_ID IN (SELECT PRODUCT_ID FROM LH_ZQ_LX_PRODUCT '    sql += 'WHERE FLAG_HLZX = "hlw_zx" AND FLAG_PROVINCES="1") '    sql += 'AND PROD_USE_TYPE="1000" AND STATUS_CD IN (100000,120000) '    sql += 'AND LAN_ID="8420600"'        cursor_select.execute(sql)    desc = cursor_select.description    col_len = len(desc)        # 生成批量插入 SQL    val_str = ''    for i in range(1, col_len):        val_str += '%s' + ','    val_str += '%s'        # 插入目标数据库    sql_insert = 'INSERT INTO bossInfo_prod_hlw_inst(acc_num) VALUES (%s)'    cursor_insert.executemany(sql_insert, val_str)        # 关闭数据库连接    ip_db.close()    target_db.close()    cursor_select.close()    cursor_insert.close()

data_temp.py

import cx_Oracledef sqlMigrate():    # 距离数据库连接    source_db = cx_Oracle.connect(        username='********',         password='********',         ip_address='********'    )        # 目标数据库连接    target_db = pymysql.connect(        host='10.37.6.***',        user='root',        password='*******',        db='enterprise_internet'    )        cursor_select = source_db.cursor()    cursor_insert = target_db.cursor()        # 执行 SQL 查询    sql = 'SELECT PRODUCT_ID, PRODUCT_NAME, FLAG1, FLAG2 FROM XY_REPORT.LDL_ZQ_ZW_HLW_PRODUCT'    cursor_select.execute(sql)        # 生成批量插入 SQL    val_str = ''    desc = cursor_select.description    col_len = len(desc)    for i in range(1, col_len):        val_str += '%s' + ','    val_str += '%s'        sql_insert = 'INSERT INTO bossInfo_product(product_id, product_name, flag_provinces, flag_hlzw) VALUES (%s)'    cursor_insert.executemany(sql_insert, val_str)        # 关闭数据库连接    source_db.close()    target_db.close()    cursor_select.close()    cursor_insert.close()

Database BackupComo paranoид

Para garantizar la seguridad de los datos, se recomienda realizar copias de seguridad del数据库 de manera regular. Aquí está un comando común para hacer un backup:

mysqldump -u root -p < password > database_backup.sql

Cursor en Python

El cursor en Python es un objeto que permite iterar sobre los resultados de una consult a SQL de manera secuencial. Aquí están ejemplos comunes del uso del cursor:

import pymysqldef fetch_data(cursor):    sql = 'SELECT * FROM students'    cursor.execute(sql)    return cursor.fetchall()def process_data(resultset):    for row in resultset:        print(f"Nombre: {row[0]}, Sexo: {row[1]}")def main():    db = pymysql.connect(        host='localhost',        user='root',        db='school',        password='********',        charset='utf8'    )    cursor = db.cursor()    data = fetch_data(cursor)    process_data(data)    db.close()    cursor.close()if __name__ == "__main__":    main()

rightsA continuación tienes algunos ejemplos de scripts de migraciónoultry-buedatabase:

migrate.py

def sqlMigrate_boss():    # Conexión a la base de datos fuente    source_db = cx_Oracle.connect(        username='********',        password='********',        ip_address='********'    )        # Conexión a la base de datos objetivo    target_db = pymysql.connect(        host='10.37.6.***',        user='root',        password='*******',        db='enterprise_internet'    )        cursor_select = source_db.cursor()    cursor_insert = target_db.cursor()        # SQL para seleccionar datos    sql = 'SELECT DISTINCT PROD_INST_ID, ORDER_ITEM_ID, ACC_NUM, ADDRESS_DESC, PROD_ID, '    sql += 'OWNER_CUST_ID, USE_CUST_ID, REGION_ID, CREATE_DATE FROM ORD_SO.ORD_PROD_INST@to_crm30db '    sql += 'WHERE PROD_ID IN (SELECT PRODUCT_ID FROM LH_ZQ_LX_PRODUCT) AND LAN_ID = "8420600" '    sql += 'AND TO_CHAR(CREATE_DATE, "yyyy-mm-dd") = TO_CHAR(SYSDATE - 1, "yyyy-mm-dd")'        cursor_select.execute(sql)        while True:        rows = cursor_select.fetchmany(1)        if not rows:            break        # Ejecutar\Ejecutear SQL INSERT        # ... (lógica de ejecución de insertes y actualizaciones)            source_db.close()    target_db.close()    cursor_select.close()    cursor_insert.close()

migrate_ip.py

import pymysqldef sqlMigrate_ip():    # Conexión a la base de datos ip    source_db = pymysql.connect(        host='10.******.***',        user='ip**',        password='*******',        db='ipzl'    )        # Conexión a la base de datos objetivo    target_db = pymysql.connect(        host='10.37.6.***',        user='root',        password='*******',        db='enterprise_internet'    )        cursor_select = source_db.cursor()    cursor_insert = target_db.cursor()        # Ejecución de SQL y carga de datos    while True:        rows = cursor_select.fetchmany(100)        if not rows:            break        cursor_insert.executemany(            'insert into ipInfo_ip(region_name, ip_r, acc_num, owner_cust_name, bras_ip, bras_rate, boss_rate, contract_rate, ip_f, ip_e, disassembled, web_port, interface, vlan, address_desc, cust_manager, remark) values (%s) ',            rows        )        source_db.close()    target_db.close()    cursor_select.close()    cursor_insert.close()

Final

El cursor es un tool fundamental en el manejo de bases de datos, permitiendo una manipulación mas flexible y eficiente de los datos. El uso apropiado del cursor puede mejorar la performances de las aplicaciones y reducir el riesgo de fallos en las operaciones de manipulación de datos.

上一篇:Django JSON序列化器/解析器
下一篇:Django REST Framework Demo

发表评论

最新留言

关注你微信了!
[***.104.42.241]2025年04月26日 22时35分05秒