主頁(yè) > 知識(shí)庫(kù) > Python連接Postgres/Mysql/Mongo數(shù)據(jù)庫(kù)基本操作大全

Python連接Postgres/Mysql/Mongo數(shù)據(jù)庫(kù)基本操作大全

熱門標(biāo)簽:煙臺(tái)電話外呼營(yíng)銷系統(tǒng) 長(zhǎng)春極信防封電銷卡批發(fā) 電銷機(jī)器人錄音要學(xué)習(xí)什么 預(yù)覽式外呼系統(tǒng) 如何地圖標(biāo)注公司 外賣地址有什么地圖標(biāo)注 上海正規(guī)的外呼系統(tǒng)最新報(bào)價(jià) 銀川電話機(jī)器人電話 企業(yè)彩鈴地圖標(biāo)注

Postgres/Mysql/Mongo是本人在工作中最常用到的數(shù)據(jù)庫(kù)?,F(xiàn)羅列了python操作這三種數(shù)據(jù)庫(kù)的基本操作,只要掌握了基本的操作,再多加訓(xùn)練,其實(shí)可以應(yīng)用的得心應(yīng)手。

1、連接PG庫(kù)

## 導(dǎo)入psycopg2包
import psycopg2
## 連接到一個(gè)給定的數(shù)據(jù)庫(kù)
conn = psycopg2.connect(database="zabbix", user="zabbix",password="zabbix", host="127.0.0.1", port="5432")
## 建立游標(biāo),用來(lái)執(zhí)行數(shù)據(jù)庫(kù)操作
cursor = conn.cursor()

## 執(zhí)行SQL命令
#cursor.execute("CREATE TABLE test_conn(id int, name text)")
#cursor.execute("INSERT INTO test_conn values(1,'haha')")

## 提交SQL命令
#conn.commit()

## 執(zhí)行SQL SELECT命令
cursor.execute("select * from drules;")

## 獲取SELECT返回的元組
rows = cursor.fetchall()
print('druleid|proxy_hostid|name|iprange| delay|nextcheck|status')
for row in rows:
    #print(row)
    print(row[0],row[1],row[2],row[3],row[4],row[5])

## 關(guān)閉游標(biāo)
cursor.close()

## 關(guān)閉數(shù)據(jù)庫(kù)連接
conn.close()

2、連接MySQL

2.1 連接數(shù)據(jù)庫(kù)

連接數(shù)據(jù)庫(kù)前,請(qǐng)先確認(rèn)以下事項(xiàng):

  • 您已經(jīng)創(chuàng)建了數(shù)據(jù)庫(kù) TESTDB.
  • 在TESTDB數(shù)據(jù)庫(kù)中您已經(jīng)創(chuàng)建了表 EMPLOYEE
  • EMPLOYEE表字段為FIRST_NAME, LAST_NAME, AGE, SEX 和 INCOME。
  • 連接數(shù)據(jù)庫(kù)TESTDB使用的用戶名為"testuser" ,密碼為 “test123”,你可以可以自己設(shè)定或者直接使用root用戶名及其密碼,Mysql數(shù)據(jù)庫(kù)用戶授權(quán)請(qǐng)使用Grant命令。
  • 在你的機(jī)子上已經(jīng)安裝了 Python MySQLdb 模塊。 如果您對(duì)sql語(yǔ)句不熟悉,可以訪問(wèn)我們的 SQL基礎(chǔ)教程
#!/usr/bin/python
# -*- coding: UTF-8 -*-

import MySQLdb

# 打開(kāi)數(shù)據(jù)庫(kù)連接
db = MySQLdb.connect("localhost", "testuser", "test123", "TESTDB", charset='utf8' )

# 使用cursor()方法獲取操作游標(biāo) 
cursor = db.cursor()

# 使用execute方法執(zhí)行SQL語(yǔ)句![在這里插入圖片描述](https://img-blog.csdnimg.cn/cover1/237894441851158706.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,image_MjAyMDA3MTUxNjIxMDEzOC5wbmc=,size_16,color_FFFFFF,t_70,image/resize,m_lfit,w_962#pic_center)

cursor.execute("SELECT VERSION()")

# 使用 fetchone() 方法獲取一條數(shù)據(jù)
data = cursor.fetchone()

print "Database version : %s " % data

# 關(guān)閉數(shù)據(jù)庫(kù)連接
db.close()

2.2 創(chuàng)建數(shù)據(jù)庫(kù)和表

#!/usr/bin/python
# -*- coding: UTF-8 -*-

import MySQLdb

# 打開(kāi)數(shù)據(jù)庫(kù)連接
db = MySQLdb.connect("localhost", "testuser", "test123", "TESTDB", charset='utf8' )

# 使用cursor()方法獲取操作游標(biāo) 
cursor = db.cursor()

# 如果數(shù)據(jù)表已經(jīng)存在使用 execute() 方法刪除表。
cursor.execute("DROP TABLE IF EXISTS EMPLOYEE")

# 創(chuàng)建數(shù)據(jù)表SQL語(yǔ)句
sql = """CREATE TABLE EMPLOYEE (
         FIRST_NAME  CHAR(20) NOT NULL,
         LAST_NAME  CHAR(20),
         AGE INT,  
         SEX CHAR(1),
         INCOME FLOAT )"""

cursor.execute(sql)

# 關(guān)閉數(shù)據(jù)庫(kù)連接
db.close()

2.3 插入數(shù)據(jù)

#!/usr/bin/python
# -*- coding: UTF-8 -*-

import MySQLdb

# 打開(kāi)數(shù)據(jù)庫(kù)連接
db = MySQLdb.connect("localhost", "testuser", "test123", "TESTDB", charset='utf8' )

# 使用cursor()方法獲取操作游標(biāo) 
cursor = db.cursor()

# SQL 插入語(yǔ)句
sql = """INSERT INTO EMPLOYEE(FIRST_NAME,
         LAST_NAME, AGE, SEX, INCOME)
         VALUES ('Mac', 'Mohan', 20, 'M', 2000)"""
try:
   # 執(zhí)行sql語(yǔ)句
   cursor.execute(sql)
   # 提交到數(shù)據(jù)庫(kù)執(zhí)行
   db.commit()
except:
   # Rollback in case there is any error
   db.rollback()

# 關(guān)閉數(shù)據(jù)庫(kù)連接
db.close()
#!/usr/bin/python
# -*- coding: UTF-8 -*-

import MySQLdb

# 打開(kāi)數(shù)據(jù)庫(kù)連接
db = MySQLdb.connect("localhost", "testuser", "test123", "TESTDB", charset='utf8' )

# 使用cursor()方法獲取操作游標(biāo) 
cursor = db.cursor()

# SQL 插入語(yǔ)句
sql = "INSERT INTO EMPLOYEE(FIRST_NAME, \

       LAST_NAME, AGE, SEX, INCOME) \

       VALUES (%s, %s, %s, %s, %s )" % \

       ('Mac', 'Mohan', 20, 'M', 2000)
try:
   # 執(zhí)行sql語(yǔ)句
   cursor.execute(sql)
   # 提交到數(shù)據(jù)庫(kù)執(zhí)行
   db.commit()
except:
   # 發(fā)生錯(cuò)誤時(shí)回滾
   db.rollback()

# 關(guān)閉數(shù)據(jù)庫(kù)連接
db.close()

2.4 數(shù)據(jù)庫(kù)查詢操作

Python查詢Mysql使用 fetchone() 方法獲取單條數(shù)據(jù), 使用fetchall() 方法獲取多條數(shù)據(jù)。

  • fetchone(): 該方法獲取下一個(gè)查詢結(jié)果集。結(jié)果集是一個(gè)對(duì)象
  • fetchall():接收全部的返回結(jié)果行.
  • rowcount: 這是一個(gè)只讀屬性,并返回執(zhí)行execute()方法后影響的行數(shù)。
#!/usr/bin/python
# -*- coding: UTF-8 -*-

import MySQLdb

# 打開(kāi)數(shù)據(jù)庫(kù)連接
db = MySQLdb.connect("localhost", "testuser", "test123", "TESTDB", charset='utf8' )

# 使用cursor()方法獲取操作游標(biāo) 
cursor = db.cursor()

# SQL 查詢語(yǔ)句
sql = "SELECT * FROM EMPLOYEE \

       WHERE INCOME > %s" % (1000)
try:
   # 執(zhí)行SQL語(yǔ)句
   cursor.execute(sql)
   # 獲取所有記錄列表
   results = cursor.fetchall()
   for row in results:
      fname = row[0]
      lname = row[1]
      age = row[2]
      sex = row[3]
      income = row[4]
      # 打印結(jié)果
      print "fname=%s,lname=%s,age=%s,sex=%s,income=%s" % \

             (fname, lname, age, sex, income )
except:
   print "Error: unable to fecth data"

# 關(guān)閉數(shù)據(jù)庫(kù)連接
db.close()

2.5 數(shù)據(jù)庫(kù)更新操作

#!/usr/bin/python
# -*- coding: UTF-8 -*-

import MySQLdb

# 打開(kāi)數(shù)據(jù)庫(kù)連接
db = MySQLdb.connect("localhost", "testuser", "test123", "TESTDB", charset='utf8' )

# 使用cursor()方法獲取操作游標(biāo) 
cursor = db.cursor()

# SQL 更新語(yǔ)句
sql = "UPDATE EMPLOYEE SET AGE = AGE + 1 WHERE SEX = '%c'" % ('M')
try:
   # 執(zhí)行SQL語(yǔ)句
   cursor.execute(sql)
   # 提交到數(shù)據(jù)庫(kù)執(zhí)行
   db.commit()
except:
   # 發(fā)生錯(cuò)誤時(shí)回滾
   db.rollback()

# 關(guān)閉數(shù)據(jù)庫(kù)連接
db.close()

2.6 刪除數(shù)據(jù)操作

#!/usr/bin/python
# -*- coding: UTF-8 -*-

import MySQLdb

# 打開(kāi)數(shù)據(jù)庫(kù)連接
db = MySQLdb.connect("localhost", "testuser", "test123", "TESTDB", charset='utf8' )

# 使用cursor()方法獲取操作游標(biāo) 
cursor = db.cursor()

# SQL 刪除語(yǔ)句
sql = "DELETE FROM EMPLOYEE WHERE AGE > %s" % (20)
try:
   # 執(zhí)行SQL語(yǔ)句
   cursor.execute(sql)
   # 提交修改
   db.commit()
except:
   # 發(fā)生錯(cuò)誤時(shí)回滾
   db.rollback()

# 關(guān)閉連接
db.close()

3、連接Mongo庫(kù)

3.1 判讀庫(kù)是否存在

#!/usr/bin/python3
 
import pymongo
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
dblist = myclient.list_database_names()
# dblist = myclient.database_names() 
if "runoobdb" in dblist:
  print("數(shù)據(jù)庫(kù)已存在!")

3.2 創(chuàng)建集合(表)

#!/usr/bin/python3
import pymongo
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["runoobdb"]
collist = mydb. list_collection_names()
# collist = mydb.collection_names()
if "sites" in collist:   # 判斷 sites 集合是否存在
   print("集合已存在!")
else:
   mycol = mydb["sites"]

3.3 插入集合

#!/usr/bin/python3
 
import pymongo
 
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["runoobdb"]
mycol = mydb["sites"]
 
mydict = { "name": "RUNOOB", "alexa": "10000", "url": "https://www.runoob.com" }
 
x = mycol.insert_one(mydict) 
print(x)
print(x)

3.4 返回 _id 字段

insert_one() 方法返回 InsertOneResult 對(duì)象,該對(duì)象包含 inserted_id 屬性,它是插入文檔的 id 值。

#!/usr/bin/python3
 
import pymongo
 
myclient = pymongo.MongoClient('mongodb://localhost:27017/')
mydb = myclient['runoobdb']
mycol = mydb["sites"]
 
mydict = { "name": "Google", "alexa": "1", "url": "https://www.google.com" }
 
x = mycol.insert_one(mydict)
print(x.inserted_id)

3.5 插入多個(gè)文檔

集合中插入多個(gè)文檔使用 insert_many() 方法,該方法的第一參數(shù)是字典列表。

#!/usr/bin/python3
 
import pymongo
 
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["runoobdb"]
mycol = mydb["sites"]
 
mylist = [
  { "name": "Taobao", "alexa": "100", "url": "https://www.taobao.com" },
  { "name": "QQ", "alexa": "101", "url": "https://www.qq.com" },
  { "name": "Facebook", "alexa": "10", "url": "https://www.facebook.com" },
  { "name": "知乎", "alexa": "103", "url": "https://www.zhihu.com" },
  { "name": "Github", "alexa": "109", "url": "https://www.github.com" }
]
 
x = mycol.insert_many(mylist)
 
# 輸出插入的所有文檔對(duì)應(yīng)的 _id 值
print(x.inserted_ids)

3.6 插入指定 _id 的多個(gè)文檔

#!/usr/bin/python3
 
import pymongo
 
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["runoobdb"]
mycol = mydb["site2"]
 
mylist = [
  { "_id": 1, "name": "RUNOOB", "cn_name": "菜鳥(niǎo)教程"},
  { "_id": 2, "name": "Google", "address": "Google 搜索"},
  { "_id": 3, "name": "Facebook", "address": "臉書"},
  { "_id": 4, "name": "Taobao", "address": "淘寶"},
  { "_id": 5, "name": "Zhihu", "address": "知乎"}
]
 
x = mycol.insert_many(mylist)
 
# 輸出插入的所有文檔對(duì)應(yīng)的 _id 值
print(x.inserted_ids)

3.7 查詢一條數(shù)據(jù)

使用 find_one() 方法來(lái)查詢集合中的一條數(shù)據(jù)。
查詢 sites 文檔中的第一條數(shù)據(jù):

#!/usr/bin/python3
 
import pymongo
 
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["runoobdb"]
mycol = mydb["sites"]
 
x = mycol.find_one()
 
print(x)

3.8 查詢集合中所有數(shù)據(jù)

find() 方法可以查詢集合中的所有數(shù)據(jù),類似 SQL 中的 SELECT * 操作。

#!/usr/bin/python3
 
import pymongo
 
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["runoobdb"]
mycol = mydb["sites"]
 
for x in mycol.find():
  print(x)

3.9 查詢指定字段的數(shù)據(jù)

可以使用 find() 方法來(lái)查詢指定字段的數(shù)據(jù),將要返回的字段對(duì)應(yīng)值設(shè)置為 1。

#!/usr/bin/python3
import pymongo 
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["runoobdb"]
mycol = mydb["sites"]
 
for x in mycol.find({},{ "_id": 0, "name": 1, "alexa": 1 }):
  print(x)

除了 _id 你不能在一個(gè)對(duì)象中同時(shí)指定 0 和 1,如果你設(shè)置了一個(gè)字段為 0,則其他都為 1,反之亦然。

#!/usr/bin/python3
 
import pymongo
 
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["runoobdb"]
mycol = mydb["sites"]
 
for x in mycol.find({},{ "alexa": 0 }):
  print(x)

3.10 根據(jù)指定條件查詢

#!/usr/bin/python3
 
import pymongo
 
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["runoobdb"]
mycol = mydb["sites"]
 
myquery = { "name": "RUNOOB" }
 
mydoc = mycol.find(myquery)
 
for x in mydoc:
  print(x)

3.11 高級(jí)查詢

以下實(shí)例用于讀取 name 字段中第一個(gè)字母 ASCII 值大于 “H” 的數(shù)據(jù),大于的修飾符條件為 {"$gt": “H”} :

#!/usr/bin/python3
 
import pymongo
 
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["runoobdb"]
mycol = mydb["sites"]
 
myquery = { "name": { "$gt": "H" } }
 
mydoc = mycol.find(myquery)
 
for x in mydoc:
  print(x)

3.12 使用正則表達(dá)式查詢

正則表達(dá)式修飾符只用于搜索字符串的字段。

以下實(shí)例用于讀取 name 字段中第一個(gè)字母為 “R” 的數(shù)據(jù),正則表達(dá)式修飾符條件為 {"$regex": “^R”} :

#!/usr/bin/python3
 
import pymongo
 
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["runoobdb"]
mycol = mydb["sites"]
 
myquery = { "name": { "$regex": "^R" } }
 
mydoc = mycol.find(myquery)
 
for x in mydoc:
  print(x)

3.13 返回指定條數(shù)記錄

如果我們要對(duì)查詢結(jié)果設(shè)置指定條數(shù)的記錄可以使用 limit() 方法,該方法只接受一個(gè)數(shù)字參數(shù)。

import pymongo
 
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["runoobdb"]
mycol = mydb["sites"]
 
myresult = mycol.find().limit(3)
 
# 輸出結(jié)果
for x in myresult:
  print(x)

3.14 修改數(shù)據(jù)

以在 MongoDB 中使用 update_one() 方法修改文檔中的記錄。該方法第一個(gè)參數(shù)為查詢的條件,第二個(gè)參數(shù)為要修改的字段。

如果查找到的匹配數(shù)據(jù)多于一條,則只會(huì)修改第一條。

import pymongo
 
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["runoobdb"]
mycol = mydb["sites"]
 
myquery = { "alexa": "10000" }
newvalues = { "$set": { "alexa": "12345" } }
 
mycol.update_one(myquery, newvalues)
 
# 輸出修改后的  "sites"  集合
for x in mycol.find():
  print(x)

update_one() 方法只能修匹配到的第一條記錄,如果要修改所有匹配到的記錄,可以使用 update_many()。
以下實(shí)例將查找所有以 F 開(kāi)頭的 name 字段,并將匹配到所有記錄的 alexa 字段修改為 123:

import pymongo
 
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["runoobdb"]
mycol = mydb["sites"]
 
myquery = { "name": { "$regex": "^F" } }
newvalues = { "$set": { "alexa": "123" } }
 
x = mycol.update_many(myquery, newvalues)
 
print(x.modified_count, "文檔已修改")

3.15 排序

sort() 方法可以指定升序或降序排序。
sort() 方法第一個(gè)參數(shù)為要排序的字段,第二個(gè)字段指定排序規(guī)則,1 為升序,-1 為降序,默認(rèn)為升序。

#!/usr/bin/python3
import pymongo

myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["runoobdb"]
mycol = mydb["sites"]
 
mydoc = mycol.find().sort("alexa")
for x in mydoc:
  print(x)

3.16 刪除數(shù)據(jù)

使用 delete_one() 方法來(lái)刪除一個(gè)文檔,該方法第一個(gè)參數(shù)為查詢對(duì)象,指定要?jiǎng)h除哪些數(shù)據(jù)。

#!/usr/bin/python3 
import pymongo 
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["runoobdb"]
mycol = mydb["sites"]
 
myquery = { "name": {"$regex": "^F"} }
x = mycol.delete_many(myquery)
print(x.deleted_count, "個(gè)文檔已刪除")

刪除多個(gè)文檔

delete_many() 方法來(lái)刪除多個(gè)文檔,該方法第一個(gè)參數(shù)為查詢對(duì)象,指定要?jiǎng)h除哪些數(shù)據(jù)。
刪除所有 name 字段中以 F 開(kāi)頭的文檔:

#!/usr/bin/python3
 
import pymongo
 
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["runoobdb"]
mycol = mydb["sites"]
 
x = mycol.delete_many({})
 
print(x.deleted_count, "個(gè)文檔已刪除")

3.17 刪除集合中的所有文檔

delete_many() 方法如果傳入的是一個(gè)空的查詢對(duì)象,則會(huì)刪除集合中的所有文檔:

#!/usr/bin/python3
 
import pymongo
 
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["runoobdb"]
mycol = mydb["sites"]
 
x = mycol.delete_many({})
 
print(x.deleted_count, "個(gè)文檔已刪除")

3.17 刪除集合

使用 drop() 方法來(lái)刪除一個(gè)集合。
以下實(shí)例刪除了 customers 集合:

#!/usr/bin/python3
 
import pymongo
 
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["runoobdb"]
mycol = mydb["sites"]
 
mycol.drop()

到此這篇關(guān)于Python連接Postgres/Mysql/Mongo數(shù)據(jù)庫(kù)基本操作的文章就介紹到這了,更多相關(guān)Python連接數(shù)據(jù)庫(kù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • 將Python腳本打包成MACOSAPP程序過(guò)程
  • [項(xiàng)目布局配置]Nosql與PythonWeb-Flask框架組合
  • Python使用signal定時(shí)結(jié)束AsyncIOScheduler任務(wù)的問(wèn)題
  • python生成可執(zhí)行exe控制Microsip自動(dòng)填寫號(hào)碼并撥打功能
  • Python之os模塊案例詳解

標(biāo)簽:宜昌 湖北 西寧 盤錦 佳木斯 珠海 潮州 上饒

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Python連接Postgres/Mysql/Mongo數(shù)據(jù)庫(kù)基本操作大全》,本文關(guān)鍵詞  Python,連接,Postgres,Mysql,Mongo,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Python連接Postgres/Mysql/Mongo數(shù)據(jù)庫(kù)基本操作大全》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于Python連接Postgres/Mysql/Mongo數(shù)據(jù)庫(kù)基本操作大全的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章