python往数据库插数

本文介绍了使用Python进行Oracle和MySQL数据库数据迁移的方法,包括连接数据库、检查日期格式、读取CSV文件并处理空值,最后通过cursor的executemany实现批量插入。
部署运行你感兴趣的模型镜像

import cx_Oracle
import pymysql
import pandas as pd
import os
import time
os.environ[‘NLS_LANG’] = ‘SIMPLIFIED CHINESE_CHINA.UTF8’
#如果想导入MySQL,修改这里为MySQL即可
target_db_type = ‘Oracle’
if target_db_type.upper() == ‘ORACLE’:
#连接串
conn = cx_Oracle.connect(‘system’, ‘RPG123456’, ‘localhost:1521/orcl.168.2.45’)
cur = conn.cursor()
#在导入数据库之前,先检查一下Date类型数据格式
cur.execute(“alter session set nls_date_format=‘yyyy-mm-dd hh24:mi:ss’”)
elif target_db_type.upper() == ‘MYSQL’:

#连接串
conn = pymysql.connect(“192.168.56.101”, “dwapp”, “tiger”, “db”)
cur = conn.cursor()
cur.arraysize = 1000
target_table = input(“请输入要导入的表名:”)
#CSV文件是否包含表头
ifreadheader = input(“是否包含表头(y,n):”)
if ifreadheader == ‘y’:
headervalue = 0
elif ifreadheader == ‘n’:
headervalue = None

获取列信息

cur.execute(‘select * from ‘+target_table+’ where 1=0’)
val_str = ‘’
if target_db_type.upper() == ‘MYSQL’:
for i in range (1,len(cur.description)):
val_str = val_str+’%s’+’,’

MySQL批量插入语法是 insert into tb_name values(%s,%s,%s,%s)

val_str = val_str+’%s’
elif target_db_type.upper() == ‘ORACLE’:
for i in range (1,len(cur.description)):
val_str = val_str+’:’+str(i)+’,’
val_str = val_str+’:’+str(i+1)
#Oracle批量插入语法是 insert into tb_name values(:1,:2,:3)
insert_sql = ‘insert into ‘+target_table+’ values(’+val_str+’)’
#拼接insert into 目标表 values
print(insert_sql)
print(‘开始导入:’, time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
#na_filter=’’ 将空值处理为’’ 不然默认为NaN
csv_data = pd.read_csv(‘emp.csv’, header=headervalue, chunksize=50000, encoding=‘GBK’, na_filter=’’)
for chunk in csv_data:
rows = chunk.values.tolist()
print(rows)

将rows中的’‘处理为None,不然沙雕MySQL INT类型字段值’‘会变成0 VARCHAR字段值会变成’’ 而不是NULL

for x in range(0, len(rows)):
for i in range(0, len(rows[x])):
if rows[x][i] == ‘’:
rows[x][i] = None

批量插入

cur.executemany(insert_sql,rows)
conn.commit()
cur.close()
conn.close()
print(‘导入完成:’,time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))

您可能感兴趣的与本文相关的镜像

Python3.9

Python3.9

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

Python中,向数据库插入据通常涉及以下几个步骤: 1. **导入库**:首先,你需要安装并导入相应的数据库驱动程序。例如,如果使用的是MySQL,你会导入`mysql-connector-python`;如果是SQLite,直接使用内置的sqlite3模块即可。 ```python import mysql.connector # 或者 import sqlite3 ``` 2. **连接数据库**:根据所使用的数据库系统创建连接。对于SQL Server,可以使用`pyodbc`或`sqlalchemy`等第三方库。 ```python # MySQL 示例 cnx = mysql.connector.connect(user='username', password='password', host='localhost', database='database_name') # SQLite 示例 conn = sqlite3.connect('database.db') ``` 3. **创建游标**:通过连接创建一个游标对象,它是一个可以发送SQL命令的对象。 ```python cursor = cnx.cursor() # 或者 cursor = conn.cursor() ``` 4. **编写SQL语句**:准备一条INSERT语句,指定要插入据表名、字段以及要插入的具体值。 ```python sql = "INSERT INTO table_name (column1, column2, ...) VALUES (%s, %s, ...)" values = ('value1', 'value2', ...) ``` 这里使用了参占位符 `%s`,以便安全地防止SQL注入攻击。 5. **执行SQL**:调用游标的`execute()`方法执行SQL,并提交事务(如果需要)。 ```python cursor.execute(sql, values) cnx.commit() # 对于MySQL conn.commit() # 对于SQLite ``` 6. **关闭资源**:最后别忘了关闭游标和连接,释放内存和关闭数据库连接。 ```python cursor.close() cnx.close() conn.close() ``` 以上就是一个基本的Python数据库插入据的过程。具体操作可能会因数据库类型和库的不同而有所变化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值