记录python使用pymysql连接mysql数据库,使用impyla、ibis-framework[impala]连接hive\impala(kerberos)数据库(备以后查阅)
  1. 连接mysql 数据库

    # @time: 2022/1/21 13:12
    # @function : 连接mysql数据库import pymysql
    import pandas as pdclass Mysql_:def __init__(self):self.db = pymysql.Connect(user='user', password='xxxx', host='xx.xx.xx.xx',database='database', port=3306)self.cursor = self.db.cursor()def select(self, sql, data=None):states = self.cursor.execute(sql)res = self.cursor.fetchall()return states, resdef insert_one(self, sql, data):try:self.cursor.execute(sql, data)self.db.commit()except:self.db.rollback()finally:self.cursor.close()def insert_many(self, sql, data):try:self.cursor.executemany(sql, data)self.db.commit()except:self.db.rollback()finally:self.cursor.close()def __del__(self):self.cursor.close()self.db.close()if __name__ == '__main__':data = pd.read_csv('xxx.csv')data.fillna(0, inplace=True)mysql_ = Mysql_()sql = "insert into tablename values(%(filed_name1)s,%(filed_name2)s)"items = []for item in data.values[:1]:values = []for i in item[1:]:if type(i) != str:values.append(int(i))else:values.append(i)data = dict(zip(['filed_name1','filed_name2'], values))items.append(data)# 插入数据库多条数据,使用%(name)s作sql语句占位符,数据参数项使用[{name1:1,name2:2},{}]格式传入,经测试插入200万数据,花费大概1分钟mysql_.insert_many(sql, items)
  2. 分别使用impyla和ibis两种模块,连接hive/impala数仓

    from impala.dbapi import connect
    from krbcontext import krbcontext
    from impala.util import as_pandas
    import ibis# 配置文件
    class Config:config = {"kerberos_principal":"kerberos_user","keytab_file":"/home/user/user.keytab","host":"xxxxx","port":10000,"AUTH_MECHANISM":"GSSAPI",# ibis连接impala需要连接hdfs分布式文件的客户端,否则只能读取数据,不能进行表操作、数据插入更新等。"webhdfs_host1":"xxxxxx",# hdfs服务"webhdfs_port":9870}# 使用impyla连接
    class Hive_connect:def __init__(self,config,database,service_name='hive'):# 进行kerberos认证with krbcontext(using_keytab=True,principal=config.config['kerberos_principal'],keytab_file=config.config['keytab_file']):self.conn = connect(host=config.config['host'],port=config.config['port'],database=database,auth_mechanism=config.config['AUTH_MECHANISM'],kerberos_service_name=service_name)self.cur = self.conn.cursor()def select(self,sql):self.cur.execute(sql)#print(self.cur.description) # 打印结果list(字段和字段类型)#res = self.cur.fetchall()   # sql查询结果list集# print(res)df = as_pandas(self.cur)   # 获取dataframe类型数据,将数据转化为dataframe数,数据会有些小问题,比如数据库字段类型为float会转化为objectreturn dfdef insert_one(self,sql):state = 'INSERT_FAIL'try:self.cur.execute(sql)self.conn.commit()state = self.cur.status()except:self.conn.rollback()finally:self.conn_close()return state   # 'FINISHED_STATEDI'# 插入多条数据,看源码得知,就是遍历data,执行insert_one,hive插入数据会进行MR运算,速度非常慢,慢的离谱,插入多条sql占位符可以上面mysql的一样,也可以使用%s进行占位,插入数据格式[(data1,data2),(),()]def insert_many(self,sql,data):state = 'INSERT_FAIL'try:self.cur.executemany(operation=sql,seq_of_parameters=data)self.conn.commit()state = self.cur.status()except:self.conn.rollback()finally:self.conn_close()return state   # 'FINISHED_STATEDI'def delete(self):raise AttributeError ('不允许执行删除操作')def conn_close(self):self.cur.close() # 先关游标连接,在断客户端连接self.conn.close()# 使用ibis连接
    class Hive_connect_ibis:def __init__(self,config,database,service_name='hive'):with krbcontext(using_keytab=True,principal=config.config['kerberos_principal'],keytab_file=config.config['keytab_file']):self.hdfs = ibis.impala.hdfs_connect(host=config.config['webhdfs_host1'],port=config.config['webhdfs_port'],auth_mechanism=config.config['AUTH_MECHANISM'],use_https=False,verify=False)self.client = ibis.impala.connect(host=config.config['host'],port=config.config['port'],database=database,hdfs_client=self.hdfs,auth_mechanism=config.config['AUTH_MECHANISM'],kerberos_service_name=service_name)def select(self,sql):res = self.client.sql(sql)df = res.execute(limit='default'/None)# 默认返回的数据集行数self.conn_close()return dfdef insert(self):pass # hdfs未连上,禁止创建数据库、数据表、插入或更新数据raise AttributeError ('不允许执行删除操作')def conn_close(self):self.client.close()config = Config()
    if __name__ == '__main__':config = Config()hive_ = Hive_connect_ibis(config=config,database='database')hive_.execute('select * from d_cust limit 10')

记录python使用pymysql连接mysql数据库,使用impyla、ibis-framework[impala]连接hive\impala(kerberos)数据库(备以后查阅)相关推荐

  1. 解决远程连接mysql很慢的方法(mysql_connect 打开连接慢)

    解决远程连接mysql很慢的方法(mysql_connect 打开连接慢) 参考文章: (1)解决远程连接mysql很慢的方法(mysql_connect 打开连接慢) (2)https://www. ...

  2. navicat远程连接mysql很慢_解决Navicat远程连接mysql很慢的方法

    ubuntu 下 /etc/mysql/mysql.conf.d [mysqld] skip-name-resolve  增加该字段即可 如果增加该字段,这无法使用本地ip进行登入, 登陆到MySql ...

  3. navicat连接mysql mac_Mac OS下,使用Navicat连接MySQL出现的问题

    问题1:安装了最新版本的MySQL(mysql-8.0.12-macos10.13-x86_64),但是Navicat版本过低,导致连接MySQL一直报"Can't connect to M ...

  4. c 连接mysql怎么增删改_C++ API方式连接mysql数据库实现增删改查

    这里复制的 http://www.bitscn.com/pdb/mysql/201407/226252.html 一.环境配置 1,装好mysql,新建一个C++控制台工程(从最简单的弄起,这个会了, ...

  5. dbcp连接mysql,8小时会自动断开连接

    为什么80%的码农都做不了架构师?>>>    最近自己做一个项目用到dbcp连接mysql,开始时很正常,可是第二天再访问服务时就出问题了,mysql连接关闭了. mysql在空闲 ...

  6. Python使用PyMysql操作MySQL数据库

    安装PyMysql: pip install PyMySQL 1.数据库连接: import pymysql# 打开数据库连接 db = pymysql.connect(host='localhost ...

  7. andriod连接mysql测试_android开发 MyEclipse下测试连接MySQL数据库

    1.首先要加载MySQL驱动包. 步骤:右击项目找到build path->configure build path->libraries-->add External JARs添加 ...

  8. es的链接老是断开怎么办_es问题解决方案记录- python es客户端 闲置一段时间后会被断开连接解决方案...

    问题描述: 在django中使用es, 当长时间没有请求查询时(大概半个小时左右),请求,则会出现超时异常,而下一次则会请求成功 初步排查: 通过测试与网上收集信息,初步判定为长时间空闲导致防火墙断开 ...

  9. 解决远程连接mysql很慢的问题(mysql_connect 打开连接慢)

    有次同事提出开发使用的mysql数据库连接很慢,因为我们的mysql开发数据库是单独一台机器部署的,所以认为可能是网络连接问题导致的.在进行 ping和route后发现网络通信都是正常的,而且在mys ...

最新文章

  1. 谈谈Linux打补丁的原理以及如何判别打补丁的错误 --- 从补丁学内核
  2. GDCM:gdcm代码中引发bad_alloc异常测试程序
  3. 查询Linux充电时间,【充电】Linux学习(二)——常用的linux命令
  4. java urlrewrite_Java|urlrewrite|URL重写|多个参数
  5. 微信小程序 - 锚点功能的实现
  6. 如何评估 Serverless 服务能力?这份报告给出了 40 条标准
  7. WCF Transaction
  8. Machine Learning - VI. Logistic Regression逻辑回归 (Week 3)
  9. 安装php-zbarcode的步骤方法
  10. 考上一级建造师很牛吗?让我从一个屌丝技术员到项目经理
  11. 智能一代云平台(十六):解决Linux服务器被植入木马总结
  12. 支付宝给微信好友转账!转了?好像又没转
  13. 计算机基础作业题及答案,计算机文化基础习题集(含答案)
  14. ASEMI代理AD633JRZ原装ADI车规级AD633JRZ
  15. MaxEnt: 最大熵模型(Maximum Entropy Models)
  16. can和could的用法_can与could用法归纳
  17. Word | 日文文段注音方法 Win Mac
  18. http协议详解及htt面试题目,常见的http状态码
  19. OpenGauss一主一从搭建(全网最详细,最简单)
  20. 2022.10.13 英语背诵

热门文章

  1. 介绍Kadence Elements元素模板:按您的方式设计网站
  2. iis环境下dz后缀portal.php,iis下DZ论坛的静态化功能
  3. 统一数据交换(UDX)
  4. [国外博士后申请]导师对简历的几点建议
  5. 购计算机软件,计算机软件购销合同
  6. 接口测试中抓包工具的使用-charles
  7. SQL数据库查询语句4
  8. 数据库备份 语句
  9. 手机闹钟软件测试用例,手机测试用例
  10. (附源码)计算机毕业设计ssm超市商品管理系统