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四种数据库读取表格及列名的方法总结
版权声明:本文标题:python连接SQLserver, oracle,redshift, mySQL四种数据库读取表格及列名的方法总结 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1730875512h1399095.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论