
本文共 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.
发表评论
最新留言
关于作者
