Python——pandas——read_sql

建议:可以先运行脚本,查询效果,在阅读该文章,脚本在文章末尾

本节主要讲解利用pandas的read_sql来操作mysql数据库。准备条件:安装sqlalchemy,pandas

操作流程:

1,利用pandas获取从文件中获取sql语句,

2,利用sqlalchemy创建数据库引擎,

3,利用read_sql执行sql语句

select_test.sql中存储了1条sql格式化的sql语句:

select_order.sql文件

select
   test_source,
   test_channel,
   order_id   
from
   test_order
where
   order_id = '{parameter}'

利用自定义函数sql_read获取select_order.sql中的sql语句,sql_read如下:

# 格式化sql语句
def sql_read(self, file_path):
    df = pd.read_csv(file_path, sep='\n', header=None)
    sql = []
    for value in df.values:
        sql.append(value[0].strip())
    sql = " ".join(sql)
    return sql

运行sql_read效果如下:

select test_source, test_channel, order_id from test_order where order_id = '{parameter}'

自定义函数sql_suid来执行sql语句,由于利用pandas.read_sql来执行sql语句时,若执行增加、删除、更新命令时,会抛出异常

SourceCodeCloseError,并终止程序,故在设计sql_suid时,必须使用try...except来捕获异常

def sql_suid(self, sql):
    # read_sql在执行增删改操作时,会抛出SourceCodeCloseError,并终止程序
    try:
        sql_data = pd.read_sql(sql, self.conn)  # read_sql需要2个参数,sql语句和数据库链接引擎
        return sql_data.values
    except Exception as e:
        print(e)

以上讲解的时最关键的2个函数,现附上脚本文件,大家可以先运行脚本,在来读文章,应该会更容易。

完整的脚本内容:

 

import pandas as pd
from sqlalchemy import create_engine

os.environ['NLS_LANG'] = 'SIMPLIFIED CHINESE_CHINA.UTF8'


class mysqks(object):
    # 初始化过程中的服务器信息请根据自己的实际信息进行改写
    def __init__(self): 
        host = '12.15.16.23'
        port = 1051
        service = 'test_service'
        user = 'test_uers'
        password = 'testpwd'
        connect_str = 'mydata+mysql://' + user + ':' + password + '@' + host + ":" + port + "/" + service
        self.conn = create_engine(connect_str, max_identifier_length=128)

    # 格式化sql语句
    def sql_read(self, file_path):
        df = pd.read_csv(file_path, sep='\n', header=None)
        sql = []
        for value in df.values:
            sql.append(value[0].strip())
        sql = " ".join(sql)
        return sql

    # 执行sql语句
    def sql_suid(self, sql):
        # read_sql在执行增删改操作时,会抛出SourceCodeCloseError,并终止程序
        try:
            sql_data = pd.read_sql(sql, self.conn)  # read_sql需要2个参数,sql语句和数据库链接引擎
            return sql_data.values
        except Exception as e:
            print(e)
            

if __name__ == "__main__":
    order_id = '201902031835412009'
    filepath = r'D:\select_order.sql'
    conn = Oracles()
    sql = conn.sql_read(filepath)
    print(sql)
    res = conn.sql_suid(sql.format(parameter=order_id))
    print(res)
 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值