新聞中心
Python作為一種高級(jí)編程語(yǔ)言,常常被應(yīng)用于數(shù)據(jù)分析、Web應(yīng)用開(kāi)發(fā)等領(lǐng)域。而許多應(yīng)用場(chǎng)景中,與數(shù)據(jù)庫(kù)的連接和數(shù)據(jù)的存取是必不可少的。,可以極大地提高開(kāi)發(fā)效率,本文將介紹Python與數(shù)據(jù)庫(kù)連接的基礎(chǔ)知識(shí)、Python與MySQL、MongoDB、Redis的連接方法以及一些常見(jiàn)問(wèn)題解決方法。

一、Python與數(shù)據(jù)庫(kù)連接的基礎(chǔ)知識(shí)
Python與數(shù)據(jù)庫(kù)連接的核心庫(kù)是Python標(biāo)準(zhǔn)庫(kù)中的sqlite3庫(kù)。該庫(kù)提供了面向關(guān)系型數(shù)據(jù)庫(kù)的API,通過(guò)該庫(kù)可以輕松地連接SQLite數(shù)據(jù)庫(kù)。在Python中,連接到其它數(shù)據(jù)庫(kù)需要使用第三方庫(kù)。
Python中連接數(shù)據(jù)庫(kù)主要需要用到以下幾個(gè)方法:
1. connect():連接到數(shù)據(jù)庫(kù),返回一個(gè)連接對(duì)象。
2. cursor():創(chuàng)建一個(gè)游標(biāo)對(duì)象,用于在數(shù)據(jù)庫(kù)中執(zhí)行SQL語(yǔ)句,并返回查詢(xún)結(jié)果。
3. execute():執(zhí)行SQL語(yǔ)句。
4. close():關(guān)閉游標(biāo)對(duì)象和數(shù)據(jù)庫(kù)連接。
二、Python與MySQL的連接方法
Python中連接MySQL數(shù)據(jù)庫(kù)最常用的庫(kù)是pymysql庫(kù),pymysql庫(kù)是一個(gè)純Python庫(kù),可以在Python中輕松地實(shí)現(xiàn)與MySQL的交互。使用pymysql庫(kù)連接MySQL需要遵循以下步驟:
1. 安裝pymysql庫(kù):可以使用pip install pymysql命令進(jìn)行安裝。
2. 連接到MySQL數(shù)據(jù)庫(kù):使用connect()方法連接到MySQL數(shù)據(jù)庫(kù),需要指定用戶(hù)名、密碼、主機(jī)地址、端口號(hào)以及要連接的數(shù)據(jù)庫(kù)名稱(chēng)等參數(shù)。例如:
“`
import pymysql
conn = pymysql.connect(
host=’localhost’,
user=’root’,
password=’password’,
db=’test’,
charset=’utf8mb4′
)
“`
3. 執(zhí)行SQL語(yǔ)句:使用execute()方法執(zhí)行SQL語(yǔ)句,例如:
“`
cur = conn.cursor()
cur.execute(“SELECT * FROM users”)
“`
4. 提交事務(wù):如果是修改操作,執(zhí)行完SQL語(yǔ)句后需要使用commit()方法提交事務(wù),例如:
“`
cur.execute(“UPDATE users SET age = 18 WHERE name = ‘John'”)
conn.commit()
“`
5. 獲取查詢(xún)結(jié)果:使用fetchone()或fetchall()方法獲取查詢(xún)結(jié)果,例如:
“`
data = cur.fetchone()
“`
三、Python與MongoDB的連接方法
MongoDB是一種文檔數(shù)據(jù)庫(kù),Python中連接MongoDB最常用的庫(kù)是pymongo庫(kù)。使用pymongo庫(kù)連接MongoDB需要遵循以下步驟:
1. 安裝pymongo庫(kù):可以使用pip install pymongo命令進(jìn)行安裝。
2. 連接到MongoDB數(shù)據(jù)庫(kù):使用MongoClient()方法連接到MongoDB數(shù)據(jù)庫(kù),需要指定要連接的主機(jī)地址、端口號(hào)以及要連接的數(shù)據(jù)庫(kù)名稱(chēng)等參數(shù)。例如:
“`
import pymongo
client = pymongo.MongoClient(“mongodb://localhost:27017/”)
db = client[“testdb”]
“`
3. 執(zhí)行操作:在MongoDB中,操作基本上可以分為查詢(xún)、插入、更新和刪除四種操作,使用collection對(duì)象進(jìn)行操作。例如:
“`
collection = db[“users”]
collection.insert_one({“name”: “John Doe”, “age”: 25})
collection.find_one({“name”: “John Doe”})
collection.update_one({“name”: “John Doe”}, {“$set”: {“age”: 30}})
collection.delete_one({“name”: “John Doe”})
“`
四、Python與Redis的連接方法
Redis是一種內(nèi)存數(shù)據(jù)庫(kù),Python中連接Redis最常用的庫(kù)是redis-py庫(kù)。使用redis-py庫(kù)連接Redis需要遵循以下步驟:
1. 安裝redis-py庫(kù):可以使用pip install redis命令進(jìn)行安裝。
2. 連接到Redis數(shù)據(jù)庫(kù):使用StrictRedis()方法連接到Redis數(shù)據(jù)庫(kù),需要指定要連接的主機(jī)地址、端口號(hào)以及要連接的數(shù)據(jù)庫(kù)名稱(chēng)等參數(shù)。例如:
“`
import redis
r = redis.StrictRedis(host=’localhost’, port=6379, db=0)
“`
3. 執(zhí)行操作:在Redis中,操作基本上可以分為字符串、列表、、哈希表等,使用StrictRedis對(duì)象進(jìn)行操作即可。例如:
“`
r.set(‘name’, ‘John’)
r.get(‘name’)
r.lpush(‘list’, 1, 2, 3)
r.rpop(‘list’)
“`
五、常見(jiàn)問(wèn)題解決方法
1. 數(shù)據(jù)庫(kù)連接超時(shí):可以在連接時(shí)指定超時(shí)時(shí)間,例如:
“`
conn = pymysql.connect(
host=’localhost’,
user=’root’,
password=’password’,
db=’test’,
charset=’utf8mb4′,
connect_timeout=5
)
“`
2. 數(shù)據(jù)庫(kù)中文亂碼:可以在連接時(shí)指定字符集為utf8mb4,例如:
“`
conn = pymysql.connect(
host=’localhost’,
user=’root’,
password=’password’,
db=’test’,
charset=’utf8mb4′
)
“`
3. 數(shù)據(jù)庫(kù)重連:可以使用try…except語(yǔ)句將數(shù)據(jù)庫(kù)連接語(yǔ)句包裹起來(lái),當(dāng)數(shù)據(jù)庫(kù)連接斷開(kāi)時(shí),重新連接數(shù)據(jù)庫(kù)。
“`
import time
while True:
try:
conn = pymysql.connect(
host=’localhost’,
user=’root’,
password=’password’,
db=’test’,
charset=’utf8mb4′
)
break
except Exception as e:
print(e)
time.sleep(5)
“`
結(jié)語(yǔ)
本文介紹了Python與數(shù)據(jù)庫(kù)連接的基礎(chǔ)知識(shí)、Python與MySQL、MongoDB、Redis的連接方法以及一些常見(jiàn)問(wèn)題解決方法,希望能幫助讀者更好地使用Python進(jìn)行數(shù)據(jù)庫(kù)操作。當(dāng)然,不同的應(yīng)用場(chǎng)景可能需要使用不同的數(shù)據(jù)庫(kù),需要根據(jù)實(shí)際情況選擇合適的數(shù)據(jù)庫(kù)。
成都網(wǎng)站建設(shè)公司-創(chuàng)新互聯(lián),建站經(jīng)驗(yàn)豐富以策略為先導(dǎo)10多年以來(lái)專(zhuān)注數(shù)字化網(wǎng)站建設(shè),提供企業(yè)網(wǎng)站建設(shè),高端網(wǎng)站設(shè)計(jì),響應(yīng)式網(wǎng)站制作,設(shè)計(jì)師量身打造品牌風(fēng)格,熱線(xiàn):028-86922220windows下怎么用python連接hive數(shù)據(jù)庫(kù)
由于版本的不同,Python 連接 Hive 的前改蘆方式也就不一樣。
在網(wǎng)上搜索關(guān)鍵字 python hive 的時(shí)候可以找到一些解決方案。大部分是這樣的,首先把hive 根目錄下的$HIVE_HOME/lib/py拷貝到 python 的庫(kù)中,慧帶也就是 site-package 中,或者干脆把新寫(xiě)的 python 代碼和拷貝的 py 庫(kù)放在同一個(gè)目錄下,然后用這殲衡個(gè)目錄下提供的 thrift 接口調(diào)用。示例也是非常簡(jiǎn)單的。類(lèi)似這樣:
import sys
from hive_service import ThriftHive
from hive_service.ttypes import HiveServerException
from thrift import Thrift
from thrift.transport import TSocket
from thrift.transport import TTransport
from thrift.protocol import TBinaryProtocol
def hiveExe(sql):
try:
transport = TSocket.TSocket(‘127.0.0.1’, 10000)
transport = TTransport.TBufferedTransport(transport)
protocol = TBinaryProtocol.TBinaryProtocol(transport)
client = ThriftHive.Client(protocol)
transport.open()
client.execute(sql)
print “The return value is : “
print client.fetchAll()
print “…………”
transport.close()
except Thrift.TException, tx:
print ‘%s’ % (tx.message)
if __name__ == ‘__main__’:
hiveExe(“show tables”)
或者是這樣的:
#!/usr/bin/env python
import sys
from hive import ThriftHive
from hive.ttypes import HiveServerException
from thrift import Thrift
from thrift.transport import TSocket
from thrift.transport import TTransport
from thrift.protocol import TBinaryProtocol
try:
transport = TSocket.TSocket(‘14.18.154.188’, 10000)
transport = TTransport.TBufferedTransport(transport)
protocol = TBinaryProtocol.TBinaryProtocol(transport)
client = ThriftHive.Client(protocol)
transport.open()
client.execute(“CREATE TABLE r(a STRING, b INT, c DOUBLE)”)
client.execute(“LOAD TABLE LOCAL INPATH ‘/path’ INTO TABLE r”)
client.execute(“SELECT * FROM test1”)
while (1):
row = client.fetchOne()
if (row == None):
break
print rowve
client.execute(“SELECT * FROM test1”)
print client.fetchAll()
transport.close()
except Thrift.TException, tx:
print ‘%s’ % (tx.message)
但是都解決不了問(wèn)題,從 netstat 中查看可以發(fā)現(xiàn) TCP 連接確實(shí)是建立了,但是不執(zhí)行 hive 指令。也許就是版本的問(wèn)題。
還是那句話(huà),看各種中文博客不如看官方文檔。
項(xiàng)目中使用的 hive 版本是0.13,此時(shí)此刻官網(wǎng)的最新版本都到了1.2.1了。中間間隔了1.2.0、1.1.0、1.0.0、0.14.0。但是還是參考一下官網(wǎng)的方法試試吧。
首先看官網(wǎng)的 setting up hiveserver2
可以看到啟動(dòng) hiveserver2 可以配置更大最小線(xiàn)程數(shù),綁定的 IP,綁定的端口,還可以設(shè)置認(rèn)證方式。(之前一直不成功正式因?yàn)檫@個(gè)連接方式)然后還給了 python 示例代碼。
import pyhs2
with pyhs2.connect(host=’localhost’,
port=10000,
authMechani=”P(pán)LAIN”,
user=’root’,
password=’test’,
database=’default’) as conn:
with conn.cursor() as cur:
#Show databases
print cur.getDatabases()
#Execute query
cur.execute(“select * from table”)
#Return column info from query
print cur.getSchema()
#Fetch table results
for i in cur.fetch():
print i
在拿到這個(gè)代碼的時(shí)候,自以為是的把認(rèn)證信息給去掉了。然后運(yùn)行發(fā)現(xiàn)跟之前博客里介紹的方法結(jié)果一樣,建立了 TCP 連接,但是就是不執(zhí)行,也不報(bào)錯(cuò)。這是幾個(gè)意思?然后無(wú)意中嘗試了一下原封不動(dòng)的使用上面的代碼。結(jié)果可以用。唉。。。
首先聲明一下,hive-site.xml中默認(rèn)關(guān)于 hiveserver2的配置我一個(gè)都沒(méi)有修改,一直是默認(rèn)配置啟動(dòng) hiveserver2。沒(méi)想到的是默認(rèn)配置是有認(rèn)證機(jī)制的。
然后再寫(xiě)一點(diǎn),在安裝 pyhs2的時(shí)候還是遇到了點(diǎn)問(wèn)題,其實(shí)還是要看官方文檔的,我只是沒(méi)看官方文檔直接用 pip安裝導(dǎo)致了這個(gè)問(wèn)題。安裝 pyhs2需要確定已經(jīng)安裝了幾個(gè)依賴(lài)包。直接看在 github 上的 wiki 吧。哪個(gè)沒(méi)安裝就補(bǔ)上哪一個(gè)就好了。
python 關(guān)聯(lián)數(shù)據(jù)庫(kù)的介紹就聊到這里吧,感謝你花時(shí)間閱讀本站內(nèi)容,更多關(guān)于python 關(guān)聯(lián)數(shù)據(jù)庫(kù),Python與數(shù)據(jù)庫(kù)的無(wú)縫對(duì)接,windows下怎么用python連接hive數(shù)據(jù)庫(kù)的信息別忘了在本站進(jìn)行查找喔。
創(chuàng)新互聯(lián)【028-86922220】值得信賴(lài)的成都網(wǎng)站建設(shè)公司。多年持續(xù)為眾多企業(yè)提供成都網(wǎng)站建設(shè),成都品牌建站設(shè)計(jì),成都高端網(wǎng)站制作開(kāi)發(fā),SEO優(yōu)化排名推廣服務(wù),全網(wǎng)營(yíng)銷(xiāo)讓企業(yè)網(wǎng)站產(chǎn)生價(jià)值。
當(dāng)前標(biāo)題:Python與數(shù)據(jù)庫(kù)的無(wú)縫對(duì)接(python關(guān)聯(lián)數(shù)據(jù)庫(kù))
文章鏈接:http://m.fisionsoft.com.cn/article/ccepjge.html


咨詢(xún)
建站咨詢(xún)
