记录python读写mysql/clickhouse/odps等常见数据库

一、读取clickhouse

1、读取得到DataFrame格式的数据

from clickhouse_driver import Client
def read_ck():
	client_ck = Client(host='',
	                   port='',
	                   user='',
	                   password='',
	                   send_receive_timeout=600,
	                   )
	sql = ''
	data = client_ck.query_dataframe(sql)
	return data

2、读取得到常规格式的数据

from clickhouse_driver import connect
def read_ck():
	conn = connect(host='', port='', user='',
	               database='',password='', send_receive_timeout=600)
    cursor = conn.cursor()
    cursor.execute(sql)
    data = cursor.fetchall()
    cursor.close()
    conn.close()
    return data

二、批量写入mysql

import pymysql
def save_mysql():
	sql = 'replace into test (name,age) value (%s,%s)'
	data = [['xiaoli','20'],['xiaozhang','25']] # 一个双层list
	conn = pymysql.Connect(
        host='',
        port='',
        user='',
        passwd='',
        db=''
    )
    cur = conn.cursor()
    cur.executemany(sql, data)
    conn.commit()
    conn.close()

这种方式可以极大提高写入Mysql的速度,虽然是批量写入但是在实际运行过程中也是分批写入,同一批数据的更改时间字段是不同的。

三、读写ODPS

1、读取ODPS

from odps import ODPS
def read_odps():
	o = ODPS(access_id='xxxxxxx', #登陆账号
	         secret_access_key='xxxxxxxx', #登陆密码
	         project='xxxxxx', #odps上的项目名称
	         endpoint='http://service.odps.aliyun.com/api') #官方提供的接口
	
	# 读数据
	sql = 'xxxxxx'
	with o.execute_sql(sql).open_reader() as reader:
		for record in reader:
			print(record)  # record可以类似于字典的形式取数据,例如record['name'],其中name是表中字段名
	# 读取出dataframe格式数据
	with o.execute_sql(sql).open_reader() as reader:
		data = reader.to_pandas()

2、写入ODPS

def write_odps():
	o = ODPS(access_id='xxxxxxx', #登陆账号
         secret_access_key='xxxxxxxx', #登陆密码
         project='xxxxxx', #odps上的项目名称
         endpoint='http://service.odps.aliyun.com/api') #官方提供的接口
    records = [['1','2','3'],['4','5','6'],['7','8','9']] #列表嵌套列表的数据格式
	o.write_table(tablename, records,partition='time=2021-07-29',create_partition=True) #表中以"time"作为分区,为time赋予值为2021-07-29时就将数据写入了“2021-07-29”分区内。

直接使用sql写数据(针对有分区表)

def write_odps():
	o = ODPS(access_id='xxxxxxx', #登陆账号
         secret_access_key='xxxxxxxx', #登陆密码
         project='xxxxxx', #odps上的项目名称
         endpoint='http://service.odps.aliyun.com/api') #官方提供的接口
	sql = 'insert into tablenameA partition(time) select B.time,B.name from tablenameB B'  # select的数据中必须包含partition即time,会在tablenameA 中自动写入相对应的分区
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值