利用jupyter notebook连接数据库

       初入职场,公司数据都是利用FreeIPA部署的Hadoop集群,第一天入职,运维大哥就给讲了一堆FreeIPA,主从,Hadoop什么的一堆,一脸懵逼(菜是原罪)。今天主要分享下利用jupyter notebook(python3.7)连接数据库遇到的一些坑。

一、Python3.7连接mysql

连接mysql比较顺利,没遇到任何坑,代码如下:

import pymysql
import pandas as pd
# 连接mysql
conn = pymysql.connect(host='你的主机名', user='用户名',password='密码',
                       database='数据库名称',charset="utf8")
sql_1 = "select * from table_name limit 10"
#利用pandas直接获取数据
data = pd.read_sql(sql_1, conn)
conn.close()

二、Python3.7连接presto

       连接presto同样很顺利,没有遇到什么坑,代码如下:

from pyhive import presto
conn = presto.connect('xxx.com', port=端口号).cursor()
conn.execute("select * from tabele_name limit 10")
for result in conn.fetchall():
    print(result)

三、Python3.7使用impyla连接hive

       presto其实查询还是挺快的,但是公司资源有限,改用hive连接了,这里有个细节就是from pyhive import hive会报错,参考大神们的博客得知需要pip install pyhive[hive] 。本来以为连接hive一样会很顺利,但是连接过程中遇到一些坑,连接的核心代码如下:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# hive util with hive server2namenode02.xxx.co
from impala.dbapi import connect
class HiveClient:
    def __init__(self, db_host, port, authMechanism, user, password, database, kbservice):
        self.conn = connect(host=db_host,
                            port=port,
                            auth_mechanism=authMechanism,
                            user=user,
                            password=password,
                            database=database,
                            kerberos_service_name=kbservice
                            )

    def query(self, sql):
        with self.conn.cursor() as cursor:
            cursor.execute(sql)
            return cursor.fetchall()

    def query_one(self, sql):
        with self.conn.cursor() as cursor:
            cursor.execute(sql)
            return cursor.fetchone()

    def execute(self, sql):
        with self.conn.cursor() as cursor:
            cursor.execute(sql)

    def cursor(self):
        return self.conn.cursor

    def close(self):
        self.conn.close()


def get_hive_client():
    return HiveClient(db_host='主机名', 
    port=10000, 
    authMechanism='GSSAPI',
    user='用户名', password='密码',
    database='数据库名', kbservice='hive')

       核心代码看着很简单也很容易理解,但是一运行坑就出来了,下来一一介绍遇到的坑:

坑1:安装包时候遇到的一堆坑

       from impala.dbapi import connect提示找不到模块
       安装包的时候参考Win7平台Python3使用impyla连接Hive遇到的坑,特别要注意安装包的顺序和对应的版本。

坑2:Kerberos认证

       Kerberos认证参考Windows本地安装配置Kerberos客户端,这里有个坑就是本地安装Kerbos需要把配置文件放在三个目录下,

·目录一:C:\ProgramData\MIT\Kerberos5\krb5.ini

·目录二:C:\Windows\krb5.ini

·目录三:C:\Program Files\MIT\Kerberos\krb5.ini

       另外本地进行认证需要把获取的krb5.ini文件中部分内容注释掉,如下所示:

# udp_preference_limit = 0
# default_ccache_name = FILE://tmp/krb5cc_%{uid}

坑3:认证成功后连接hive

       一般都是利用jupyter notebook的web页面访问hive,这时候需要在服务器上进行kerberos认证,notebook的创建新文件的new选项下面就有Terminal选项,就可以进入服务器进行kerberos认证。其实连接时输入的用户名跟密码是可以省略的,因为主要是利用生成的keytab来建立连接。

四、参考链接

       第一次利用python3.7使用impyla连接hive,参考了许多大神的博客,在这里就不一一列举了,欢迎各位大佬发现并指正博客中的错误。

       FreeIPA主从+HDP3.0.0安装配置
       Win7平台Python3使用impyla连接Hive遇到的坑
       Windows本地安装配置Kerberos客户端

  • 7
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Jupyter Notebook 可以通过 Python数据库连接库来连接数据库。常用的数据库连接库有: 1. pymysql:连接 MySQL 数据库 2. psycopg2:连接 PostgreSQL 数据库 3. cx_Oracle:连接 Oracle 数据库 4. sqlite3:连接 SQLite 数据库 连接数据库的步骤如下: 1. 安装相应的数据库连接库,例如安装 pymysql 库:`!pip install pymysql` 2. 导入数据库连接库,例如导入 pymysql 库:`import pymysql` 3. 建立数据库连接,例如连接 MySQL 数据库: ``` conn = pymysql.connect( host='localhost', port=3306, user='root', password='password', db='database_name', charset='utf8mb4' ) ``` 其中,`host` 是数据库服务器地址,`port` 是数据库服务器端口号,`user` 是数据库用户名,`password` 是数据库密码,`db` 是要连接的数据库名,`charset` 是字符集。 4. 执行 SQL 语句,例如查询表中的数据: ``` sql = 'SELECT * FROM table_name' df = pd.read_sql(sql, conn) ``` 其中,`sql` 是要执行的 SQL 语句,`df` 是查询结果转换成的 Pandas DataFrame。 5. 关闭数据库连接,例如关闭 MySQL 数据库连接: ``` conn.close() ``` ### 回答2: Jupyter是一个流行的交互式计算和数据科学平台,它能够执行代码,创建数据可视化和展示数据科学项目。同时,Jupyter Notebook也支持连接多种类型的数据库,包括MySQL,PostgreSQL和SQLite等。以下是连接Jupyter Notebook到这些数据库的步骤: 1. 安装数据库驱动 为了连接到数据库,必须安装适当的驱动程序。每个数据库都有其专有的驱动程序,因此需要根据所选的数据库类型而定。 2. 安装Python数据库API Python虽然内部提供了连接数据库的功能,但它实际上需要特定的库才能运作。Python提供了一组标准的API接口,用于和不同类型的数据库进行交互,常见的包括 sqlalchemy, pyodbc, pymysql, psycopg2等。 3. 连接数据库 连接到数据库之前,需要先创建一个数据库连接对象。在开始创建连接之前,必须设置数据库连接的IP地址,端口号,用户名和密码等参数。以下以MySQL为例: ``` import mysql.connector mydb=mysql.connector.connect(host="localhost", user="root", database="test") ``` 4. 执行SQL语句 当连接成功后,就可以使用Python编写SQL语句了。也可以在Jupyter Notebook中使用SQL Magic,这是基于Python的SQL语言扩展,也可以运用于各种关系数据库中,且用户可以使用标准的SQL语句来访问这些数据库。对于MySQL的操作如下: ``` import pandas as pd %load_ext sql %sql mysql+pymysql://root:password@localhost/testdb df = %sql SELECT * FROM table1 df.head() ``` 通过以上步骤我们便可成功地使用Jupyter Notebook连接到MySQL数据库并进行数据库操作。 ### 回答3: Jupyter Notebook 是一种交互式笔记本,它可以运行代码、可视化数据并编写文档。连接数据库是数据科学/机器学习工作中必不可少的一部分,因为数据通常储存在各种数据库中。这篇文章将介绍如何在 Jupyter Notebook连接数据库。 # 安装必要的Python库 不同的数据库会有不同的 Python 库进行连接,所以首先你需要检查、安装适用于你所使用的数据库Python 库。 假设你想连接 MySQL 数据库,在终端运行以下命令来安装相应的库: ```python !pip install mysql-connector-python ``` #导入必要的Python库 ```python import mysql.connector ``` # 连接到数据库 在这里我们使用 `mysql-connector-python` 库连接到 MySQL 数据库,并且执行查询语句。 首先,我们需要访问数据库,需要提供一些详细信息,如数据库名称,用户名,密码等。 ```python endpoint = 'database-1.cfcdhshv9zh5.us-east-2.rds.amazonaws.com' port = '3306' database = 'mydatabase' username = 'myusername' password = 'mypassword' cnx = mysql.connector.connect(user=username, password=password, host=endpoint, database=database) ``` 在上面的代码中,我们提供了数据库的用户名、密码,主机名以及要访问的数据库。我们把这些信息传入这个函数,并使用这些参数来访问数据库。 连接成功后,我们可以创建一个 `cursor` 对象,并使用此对象执行查询操作。 ```python cursor = cnx.cursor() query = ('SELECT * FROM mytable') cursor.execute(query) # 打印查询结果 for (col1, col2, col3) in cursor: print(col1, col2, col3) # 关闭连接 cursor.close() cnx.close() ``` 在上面的代码中,我们执行了一个简单的查询,并打印结果。 请注意,我们在查询中使用了星号,这表示要检索表中所有列。 然后我们使用 `cursor` 对象遍历查询结果,并关闭连接。 到此为止,我们已经连接上了数据库,并执行了一个查询。您还可以使用该方法连接到其他类型的数据库,例如 PostgreSQL 或 SQLite。 总结来说,在 Jupyter Notebook 中连接到数据库需要这样几个步骤: 1. 检查并安装必要的 Python 库。 2. 导入 Python 库。 3. 提供连接数据库所需的详细信息。 4. 连接到数据库。 5. 执行查询语句。 6. 关闭连接。 如果您学会了以上方法,就可以从数据库中访问所需的数据来进行机器学习、数据分析与可视化等操作了。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值