admin 管理员组

文章数量: 887018

python连接SQLserver, oracle,redshift, mySQL四种数据库读取表格及列名的方法总结

目录

  • 简单介绍
  • SQL server
  • Oracle
  • Redshift
  • mySQL
  • 总结

简单介绍

本人是刚刚学习Python小白,因为工作关系,接触到几种不同类型的数据库。这是连接四种不同数据库并获取数据的方法总结。如有不足之处,望高手指点。

SQL server

package: pymssql

import pymssql
#建立连接
conn = pymssql.connect('server','username','password','DB')
#创建cursor
cursor = conn.cursor()
#执行查询,传入参数
cursor.execute(sql % (parameter))
#获取并存下数据
y = cursor.fetchall()
y = pd.DataFrame(y)
#获取列名,如果查询结果为空时,下面的语句会报警,所以加了这么个if.
if len(x) != 0:x.columns = [i[0] for i in cursor.description]
#关闭cursor和连接
cursor.close()
conn.close()

Oracle

package: cx_Oracle

import cx_Oracle
#创建连接
conn = cx_Oracle.connect('user', 'password',cx_Oracle.makedsn("server", "port", 'servername'))
#创建cursor
cursor = conn.cursor()
#执行查询,传入参数
cursor.execute(sql % (parameter))
#获取并存下数据
y = cursor.fetchall()
y = pd.DataFrame(y)
#获取列名:如果查询结果为空时,下面的语句会报警,所以加了这么个if.
if len(x) != 0:x.columns = [i[0] for i in cursor.description]
#关闭cursor和连接
cursor.close()
conn.close()

Redshift

package: psycopg2

import psycopg2
#建立连接
conn = psycopg2.connect("dbname=??? host=??? \port=???? user=??? password=???)
cursor = conn.cursor()
cursor.execute(sql % (parameter))
data = cursor.fetchall()
x=pd.DataFrame(data)
if len(x) != 0:x.columns = [i[0] for i in cursor.description]
else:print('no data from Redshift')
cursor.close()
conn.close()

mySQL

package: pymysql

conn = pymysql.connect(host = ???,port = ???,user = ???,passwd =???,db =???,cursorclass=pymysql.cursors.DictCursor)
cursor = conn.cursor()
cursor.execute(sql % (parameter) )
x = cursor.fetchall()
x = pd.DataFrame(x)
cursor.close()
conn.close()
return x

总结

oracle, SQL server,和 redshift 建立连接的时候大同小异,获取数据和列名的时候,使用的方法都是一样的。

但是mysql是个奇葩,用原来的获取方式,拿到的是个tuple. 所以再创建要定义这个cursor类型。

cursorclass=pymysql.cursors.DictCursor

然后拿到的数据就是带列名的,神奇呀。

pandas 有一个read_sql也挺好用,也包括列名,但是传参数我还没有尝试过怎么用。下次再练习一下下。

本文标签: python连接SQLserver Oracle redshift mySQL四种数据库读取表格及列名的方法总结