用python实现基本数据库操作(csv文件写入数据库,基于impala)

用python实现基本数据库操作(csv文件写入数据库,基于impala)

初来乍到,最近在数据服务部实习,想把学到的一些知识在博客上记录下来,这里我使用的数据库是impala,如果改成mySQL数据库也是一样的。

客户端连接数据库

    def connect(self):
        """连接数据库和客户端"""
        engine = create_engine('impala://{}:{}/{}'.format(self.host, self.port, self.database))
        self.con = engine.connect()

向数据库中写入数据

    def writetoSQL(self, file):
        """向数据库中写入数据"""
        targetfile = file
        data = pd.read_csv(targetfile, names=['name', 'age', 'contact'], header=0)
        data.to_sql(name='teacher', con=self.con, if_exists='append', index=False)

主函数

if __name__ == "__main__":
    filename = './test.csv'
    writer = WriteToDb('169.169.171.88', '21050', 'first_db')
    writer.connect()
    writer.writetoSQL(filename)

以下是将上述代码封装后的文件

我将连接、读取的两个方法封装在了一个类中,放在了下面这个模块中:
commonFunc.py

import pandas as pd
from sqlalchemy import create_engine

class WriteToDb(object):
    def __init__(self, hostname, port, database):
        self.host = hostname
        self.port = port
        self.database = database

    def connect(self):
        """连接数据库和客户端"""
        engine = create_engine('impala://{}:{}/{}'.format(self.host, self.port, self.database))
        self.con = engine.connect()
        # return self.con

    def writetoSQL(self, file):
        """向数据库中写入数据"""
        targetfile = file
        data = pd.read_csv(targetfile, names=['name', 'age', 'contact'], header=0)
        data.to_sql(name='teacher', con=self.con, if_exists='append', index=False)

我将主函数放在了另一个包的模块中,这里实现了一个跨包的调用:
writeSQL.py

from util.commonFunc import WriteToDb
if __name__ == "__main__":
    filename = './test.csv'
    writer = WriteToDb('169.169.171.88', '21050', 'first_db')
    writer.connect()
    writer.writetoSQL(filename)

结果测试

我在’test.csv’文件中加入了几行数据,然后运行这个项目,可以成功将csv文件中的数据写入impala数据库:

首先我用这个函数向csv文件中添加两行数据:
writetoCSV.py

import csv
def writetoCSV(file):
    targetfile = file
    with open(targetfile, 'w', newline='') as outcsv:
        fieldnames = ['name', 'age', 'contact']
        writer = csv.DictWriter(outcsv, fieldnames=fieldnames)
        writer.writeheader()
        writer.writerow({'name': 'ouyangnana', 'age':20})
        writer.writerow({'name': 'penglei','age': 30})

writetoCSV('./test.csv')

可以看到test.csv中已经加入了这两行数据:

运行主函数文件,可以看到数据库中也加上了这两行数据:
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值