汇总了Python连接几种常用数据库的方法。
模块包准备
pymssql:连接SQL server数据库
pymysql:连接MYSQL数据库
pyhive: 连接Hive数据库
#模块安装
! pip install pymssql
! pip install pymysql
! pip install pyhive
pymysql
## connect 连接
#harset可省略,如果数据库有中文,可以将charset设置为‘utf8'或'gbk'
pymssql.connect(server='localhost',user='用户名',password='用户密码',database='数据库名称',charset='gbk')
## sql读取
pd.read_sql(sql,con,index_col=None,coerce_float=True,parse_dates=None,columns=None)
Pymssql
#pymysql
connect=pymysql.connect(host='localhost',user='用户名',password='用户密码',database='数据库名称',port='端口号',charset='gbk')
cursor = connect.cursor()
# 创建测试表 persons,包含字段:ID、name、salesrep
cursor.execute("""
IF OBJECT_ID('persons', 'U') IS NOT NULL
DROP TABLE persons
CREATE TABLE persons (
id INT NOT NULL,
name VARCHAR(100),
salesrep VARCHAR(100),
PRIMARY KEY(id)
)
""")
# 插入三条测试数据
cursor.executemany(
"INSERT INTO persons VALUES (%d, %s, %s)",
[(1, 'John Smith', 'John Doe'),
(2, 'Jane Doe', 'Joe Dog'),
(3, 'Mike T.', 'Sarah H.')])
# 如果连接时没有设置autocommit为True的话,必须主动调用commit() 来保存更改。
conn.commit()
# 查询记录
cursor.execute('SELECT * FROM persons WHERE salesrep=%s', 'John Doe')
# 获取一条记录
row = cursor.fetchone()
# 循环打印记录(这里只有一条,所以只打印出一条)
while row:
print("ID=%d, Name=%s" % (row[0], row[1]))
row = cursor.fetchone()
# 关闭
conn.close()
连接hive
from pyhive import hive
conn = hive.Connection(host='192.168.0.1',
port=10000,
auth="CUSTOM",
database='gld',
username='hive',
password='hive')
cursor = conn.cursor()
cursor.execute('select * from student limit 10')
for result in cursor.fetchall():
print(result)
cursor.close()
conn.close()
连接presto
from pyhive import presto
#打开数据库链接
db=presto.connect(protocol='https',host='xxx',port='xxx',username='username', password='password'
cursor = db.cursor()
sql= """select * from table where time ='2021-03-30'"""
#执行SQL语句
cursor.execute(sql)
#查询第一条数据/所有数据
cursor.fetchone()
cursor.fetchall()
#data = pd.read_sql(sql=sql,con=db,coerce_float=True) #把查询的sql转换为dataframe格式
data = pd.read_sql(sql=sql,con=db)
#关闭断开链接
cursor.close()
db.close()