利用pandas连接mysql,oracle数据库进行查询和插入操作

本文介绍如何使用Python进行MySQL和Oracle数据库的操作,包括环境配置、数据读取、更新等过程,并提供示例代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

环境配置:

  • 操作系统:win10(64位)
  • oracle客户端:instantclient_11_2(64位)
  • python版本:python3.6.3(64位)
  • python相关包:sqlalchemy, pandas, pymysql,cx_oracle

示例代码

# python 3.6.3

from sqlalchemy import create_engine
import pandas as pd

"""
mysql
-- 建表:
CREATE TABLE students (
    id INTEGER PRIMARY KEY AUTO_INCREMENT,
    name NVARCHAR(16),
    age INT,
    address NVARCHAR(256)
);

-- 插入数据:
INSERT INTO students(name,age,address) VALUES('zhangsan',18,'北京');
INSERT INTO students(name,age,address) VALUES('lisi',19,'上海');
INSERT INTO students(name,age,address) VALUES('wangyu',19,'天津');
INSERT INTO students(name,age,address) VALUES('xiaoliu',20,'重庆');
"""

# 导入mysql相关包
import pymysql
# MySQLdb只支持python2,python3需要用pymysql代替
pymysql.install_as_MySQLdb()

# 创建mysql连接引擎
# engine = create_engine('mysql+mysqldb://username:password@host:port/dbname?charset=utf8')
engine = create_engine(
    'mysql+mysqldb://root:123456@127.0.0.1:3306/marsapp?charset=utf8')

# 查询数据并转为pandas.DataFrame,指定DataFrame的index为数据库中的id字段
df = pd.read_sql('SELECT * FROM students', engine, index_col='id')
print(df)
# 修改DataFrame中的数据(移除age列)
dft = df.drop(['age'], axis=1)
# 将修改后的数据追加至原表,index=False代表不插入索引,因为数据库中id字段为自增字段
dft.to_sql('students', engine, index=False, if_exists='append')


"""
Oracle
-- 建表:
CREATE TABLE STUDENTS (
    ID NUMBER PRIMARY KEY KEY NOT NULL,
    NAME VARCHAR2(16),
    AGE NUMBER,
    ADDRESS VARCHAR2(256)
);
-- 创建自增序列:
CREATE SEQUENCE STUDENTS_SEQ
        MINVALUE 1
        NOMAXVALUE
        START WITH 1
        INCREMENT BY 1
        NOCYCLE
        NOCACHE

-- 创建自增触发器:
CREATE OR REPLACE TRIGGER STUDENTS_TG 
            BEFORE INSERT ON STUDENTS FOR EACH ROW WHEN(NEW.ID IS NULL)
            BEGIN
            SELECT STUDENTS_SEQ.NEXTVAL INTO:NEW.ID FROM DUAL;
            END;

-- 插入数据(语法直接复制的mysql,oracle若提示不正确,请根据提示改正):
INSERT INTO STUDENTS(NAME,AGE,ADDRESS) VALUES('ZHANGSAN',18,'北京');
INSERT INTO STUDENTS(NAME,AGE,ADDRESS) VALUES('LISI',19,'上海');
INSERT INTO STUDENTS(NAME,AGE,ADDRESS) VALUES('WANGYU',19,'天津');
INSERT INTO STUDENTS(NAME,AGE,ADDRESS) VALUES('XIAOLIU',20,'重庆');

"""

# 解决oracle中文乱码问题
import os
os.environ['NLS_LANG'] = 'SIMPLIFIED CHINESE_CHINA.UTF8'


# 创建oracle连接引擎,需要安装cx_oracle,下面两种连接方式都可以
# engine = create_engine("oracle://username:password@host:port/servicename")
# 这种写法省略了cx_oracle,因为缺省使用cx_oracle
engine = create_engine("oracle://ORIGIN:123456@127.0.0.1:1521/ORCL")

# 这种写法是指明了使用cx_oracle
# engine = create_engine("oracle+cx_oracle://username:password@host:port/servicename")
engine = create_engine(
    'oracle+cx_oracle://ORIGIN:123456@127.0.0.1:1521/ORCL')

# 其它操作同mysql示例
df = pd.read_sql('SELECT * FROM STUDENTS', engine, index_col='ID')
print(df)
dft = df.drop(['age'], axis=1)
dft.to_sql('STUDENTS', engine, index=0, if_exists='append')
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值