Python连接Postgres/Mysql/Mongo数据库基本操作大全


Posted in Python onJune 29, 2021
目录
  • 1、连接PG库
  • 2、连接MySQL
    • 2.1 连接数据库
    • 2.2 创建数据库和表
    • 2.3 插入数据
    • 2.4 数据库查询操作
    • 2.5 数据库更新操作
    • 2.6 删除数据操作
  • 3、连接Mongo库
    • 3.1 判读库是否存在
    • 3.2 创建集合(表)
    • 3.3 插入集合
    • 3.4 返回 _id 字段
    • 3.5 插入多个文档
    • 3.6 插入指定 _id 的多个文档
    • 3.7 查询一条数据
    • 3.8 查询集合中所有数据
    • 3.9 查询指定字段的数据
    • 3.10 根据指定条件查询
    • 3.11 高级查询
    • 3.12 使用正则表达式查询
    • 3.13 返回指定条数记录
    • 3.14 修改数据
    • 3.15 排序
    • 3.16 删除数据
    • 3.17 删除集合中的所有文档
    • 3.17 删除集合

Python连接Postgres/Mysql/Mongo数据库基本操作大全

Postgres/Mysql/Mongo是本人在工作中最常用到的数据库。现罗列了python操作这三种数据库的基本操作,只要掌握了基本的操作,再多加训练,其实可以应用的得心应手。

 

1、连接PG库

## 导入psycopg2包
import psycopg2
## 连接到一个给定的数据库
conn = psycopg2.connect(database="zabbix", user="zabbix",password="zabbix", host="127.0.0.1", port="5432")
## 建立游标,用来执行数据库操作
cursor = conn.cursor()

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

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

## 执行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])

## 关闭游标
cursor.close()

## 关闭数据库连接
conn.close()

 

2、连接MySQL

 

2.1 连接数据库

连接数据库前,请先确认以下事项:

  • 您已经创建了数据库 TESTDB.
  • 在TESTDB数据库中您已经创建了表 EMPLOYEE
  • EMPLOYEE表字段为FIRST_NAME, LAST_NAME, AGE, SEX 和 INCOME。
  • 连接数据库TESTDB使用的用户名为"testuser" ,密码为 “test123”,你可以可以自己设定或者直接使用root用户名及其密码,Mysql数据库用户授权请使用Grant命令。
  • 在你的机子上已经安装了 Python MySQLdb 模块。 如果您对sql语句不熟悉,可以访问我们的 SQL基础教程
#!/usr/bin/python
# -*- coding: UTF-8 -*-

import MySQLdb

# 打开数据库连接
db = MySQLdb.connect("localhost", "testuser", "test123", "TESTDB", charset='utf8' )

# 使用cursor()方法获取操作游标 
cursor = db.cursor()

# 使用execute方法执行SQL语句![在这里插入图片描述](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() 方法获取一条数据
data = cursor.fetchone()

print "Database version : %s " % data

# 关闭数据库连接
db.close()

 

2.2 创建数据库和表

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

import MySQLdb

# 打开数据库连接
db = MySQLdb.connect("localhost", "testuser", "test123", "TESTDB", charset='utf8' )

# 使用cursor()方法获取操作游标 
cursor = db.cursor()

# 如果数据表已经存在使用 execute() 方法删除表。
cursor.execute("DROP TABLE IF EXISTS EMPLOYEE")

# 创建数据表SQL语句
sql = """CREATE TABLE EMPLOYEE (
         FIRST_NAME  CHAR(20) NOT NULL,
         LAST_NAME  CHAR(20),
         AGE INT,  
         SEX CHAR(1),
         INCOME FLOAT )"""

cursor.execute(sql)

# 关闭数据库连接
db.close()

 

2.3 插入数据

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

import MySQLdb

# 打开数据库连接
db = MySQLdb.connect("localhost", "testuser", "test123", "TESTDB", charset='utf8' )

# 使用cursor()方法获取操作游标 
cursor = db.cursor()

# SQL 插入语句
sql = """INSERT INTO EMPLOYEE(FIRST_NAME,
         LAST_NAME, AGE, SEX, INCOME)
         VALUES ('Mac', 'Mohan', 20, 'M', 2000)"""
try:
   # 执行sql语句
   cursor.execute(sql)
   # 提交到数据库执行
   db.commit()
except:
   # Rollback in case there is any error
   db.rollback()

# 关闭数据库连接
db.close()
#!/usr/bin/python
# -*- coding: UTF-8 -*-

import MySQLdb

# 打开数据库连接
db = MySQLdb.connect("localhost", "testuser", "test123", "TESTDB", charset='utf8' )

# 使用cursor()方法获取操作游标 
cursor = db.cursor()

# SQL 插入语句
sql = "INSERT INTO EMPLOYEE(FIRST_NAME, \
       LAST_NAME, AGE, SEX, INCOME) \
       VALUES (%s, %s, %s, %s, %s )" % \
       ('Mac', 'Mohan', 20, 'M', 2000)
try:
   # 执行sql语句
   cursor.execute(sql)
   # 提交到数据库执行
   db.commit()
except:
   # 发生错误时回滚
   db.rollback()

# 关闭数据库连接
db.close()

 

2.4 数据库查询操作

Python查询Mysql使用 fetchone() 方法获取单条数据, 使用fetchall() 方法获取多条数据。

  • fetchone(): 该方法获取下一个查询结果集。结果集是一个对象
  • fetchall():接收全部的返回结果行.
  • rowcount: 这是一个只读属性,并返回执行execute()方法后影响的行数。
#!/usr/bin/python
# -*- coding: UTF-8 -*-

import MySQLdb

# 打开数据库连接
db = MySQLdb.connect("localhost", "testuser", "test123", "TESTDB", charset='utf8' )

# 使用cursor()方法获取操作游标 
cursor = db.cursor()

# SQL 查询语句
sql = "SELECT * FROM EMPLOYEE \
       WHERE INCOME > %s" % (1000)
try:
   # 执行SQL语句
   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]
      # 打印结果
      print "fname=%s,lname=%s,age=%s,sex=%s,income=%s" % \
             (fname, lname, age, sex, income )
except:
   print "Error: unable to fecth data"

# 关闭数据库连接
db.close()

 

2.5 数据库更新操作

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

import MySQLdb

# 打开数据库连接
db = MySQLdb.connect("localhost", "testuser", "test123", "TESTDB", charset='utf8' )

# 使用cursor()方法获取操作游标 
cursor = db.cursor()

# SQL 更新语句
sql = "UPDATE EMPLOYEE SET AGE = AGE + 1 WHERE SEX = '%c'" % ('M')
try:
   # 执行SQL语句
   cursor.execute(sql)
   # 提交到数据库执行
   db.commit()
except:
   # 发生错误时回滚
   db.rollback()

# 关闭数据库连接
db.close()

 

2.6 删除数据操作

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

import MySQLdb

# 打开数据库连接
db = MySQLdb.connect("localhost", "testuser", "test123", "TESTDB", charset='utf8' )

# 使用cursor()方法获取操作游标 
cursor = db.cursor()

# SQL 删除语句
sql = "DELETE FROM EMPLOYEE WHERE AGE > %s" % (20)
try:
   # 执行SQL语句
   cursor.execute(sql)
   # 提交修改
   db.commit()
except:
   # 发生错误时回滚
   db.rollback()

# 关闭连接
db.close()

Python连接Postgres/Mysql/Mongo数据库基本操作大全

 

3、连接Mongo库

 

3.1 判读库是否存在

#!/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("数据库已存在!")

 

3.2 创建集合(表)

#!/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 对象,该对象包含 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 插入多个文档

集合中插入多个文档使用 insert_many() 方法,该方法的第一参数是字典列表。

#!/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)
 
# 输出插入的所有文档对应的 _id 值
print(x.inserted_ids)

 

3.6 插入指定 _id 的多个文档

#!/usr/bin/python3
 
import pymongo
 
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["runoobdb"]
mycol = mydb["site2"]
 
mylist = [
  { "_id": 1, "name": "RUNOOB", "cn_name": "菜鸟教程"},
  { "_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)
 
# 输出插入的所有文档对应的 _id 值
print(x.inserted_ids)

 

3.7 查询一条数据

使用 find_one() 方法来查询集合中的一条数据。
查询 sites 文档中的第一条数据:

#!/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 查询集合中所有数据

find() 方法可以查询集合中的所有数据,类似 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 查询指定字段的数据

可以使用 find() 方法来查询指定字段的数据,将要返回的字段对应值设置为 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 你不能在一个对象中同时指定 0 和 1,如果你设置了一个字段为 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 根据指定条件查询

#!/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 高级查询

以下实例用于读取 name 字段中第一个字母 ASCII 值大于 “H” 的数据,大于的修饰符条件为 {"$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 使用正则表达式查询

正则表达式修饰符只用于搜索字符串的字段。

以下实例用于读取 name 字段中第一个字母为 “R” 的数据,正则表达式修饰符条件为 {"$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 返回指定条数记录

如果我们要对查询结果设置指定条数的记录可以使用 limit() 方法,该方法只接受一个数字参数。

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

 

3.14 修改数据

以在 MongoDB 中使用 update_one() 方法修改文档中的记录。该方法第一个参数为查询的条件,第二个参数为要修改的字段。

如果查找到的匹配数据多于一条,则只会修改第一条。

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()。
以下实例将查找所有以 F 开头的 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() 方法第一个参数为要排序的字段,第二个字段指定排序规则,1 为升序,-1 为降序,默认为升序。

#!/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 删除数据

使用 delete_one() 方法来删除一个文档,该方法第一个参数为查询对象,指定要删除哪些数据。

#!/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, "个文档已删除")

删除多个文档

delete_many() 方法来删除多个文档,该方法第一个参数为查询对象,指定要删除哪些数据。
删除所有 name 字段中以 F 开头的文档:

#!/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, "个文档已删除")

 

3.17 删除集合中的所有文档

delete_many() 方法如果传入的是一个空的查询对象,则会删除集合中的所有文档:

#!/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, "个文档已删除")

 

3.17 删除集合

使用 drop() 方法来删除一个集合。
以下实例删除了 customers 集合:

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

到此这篇关于Python连接Postgres/Mysql/Mongo数据库基本操作的文章就介绍到这了,更多相关Python连接数据库内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python实现倒计时的示例
Feb 14 Python
python根据距离和时长计算配速示例
Feb 16 Python
python基础教程之五种数据类型详解
Jan 12 Python
基于Python的XSS测试工具XSStrike使用方法
Jul 29 Python
Python Tkinter实现简易计算器功能
Jan 30 Python
python3将视频流保存为本地视频文件
Jun 20 Python
python采集微信公众号文章
Dec 20 Python
Python字符串的一些操作方法总结
Jun 10 Python
解决python有时候import不了当前的包问题
Aug 28 Python
使用python实现回文数的四种方法小结
Nov 24 Python
tensorflow安装成功import tensorflow 出现问题
Apr 16 Python
PyQt5爬取12306车票信息程序的实现
May 14 Python
5行Python代码实现一键批量扣图
Python爬取用户观影数据并分析用户与电影之间的隐藏信息!
python geopandas读取、创建shapefile文件的方法
总结Pyinstaller打包的高级用法
Pandas数据类型之category的用法
Jun 28 #Python
Python爬虫框架之Scrapy中Spider的用法
Jun 28 #Python
简单谈谈Python面向对象的相关知识
Jun 28 #Python
You might like
利用PHP创建动态图像
2006/10/09 PHP
php初学者写及时补给skype用户充话费的小程序
2008/11/02 PHP
PHP开发环境配置(MySQL数据库安装图文教程)
2010/04/28 PHP
php环境套包 dedeampz 伪静态设置示例
2014/03/26 PHP
PHP图片自动裁切应付不同尺寸的显示
2014/10/16 PHP
分享50个提高PHP执行效率的技巧
2015/12/26 PHP
php中的常用魔术方法汇总
2016/02/14 PHP
Linux平台php命令行程序处理管道数据的方法
2016/11/10 PHP
Laravel 实现Eloquent模型分组查询并返回每个分组的数量 groupBy()
2019/10/23 PHP
MooTools 1.2介绍
2009/09/14 Javascript
Javascript实现CheckBox的全选与取消全选的代码
2010/07/20 Javascript
来自qq的javascript面试题
2010/07/24 Javascript
快速排序 php与javascript的不同之处
2011/02/22 Javascript
用js判断输入是否为中文的函数
2014/03/10 Javascript
基于jQuery的图片不完全按比例自动缩小
2014/07/11 Javascript
浅谈Javascript变量作用域问题
2014/12/16 Javascript
EasyUI中datagrid在ie下reload失败解决方案
2015/03/09 Javascript
JQuery判断radio(单选框)是否选中和获取选中值方法总结
2015/04/15 Javascript
JavaScript获得url查询参数的方法
2015/07/02 Javascript
学习使用grunt来打包JavaScript和CSS程序的教程
2016/01/04 Javascript
Angularjs实现搜索关键字高亮显示效果
2017/01/17 Javascript
Angular 2父子组件数据传递之@Input和@Output详解(下)
2017/07/05 Javascript
Vue下的国际化处理方法
2017/12/18 Javascript
TypeScript之调用栈的实现
2019/12/31 Javascript
微信小程序中使用 async/await的方法实例分析
2020/05/06 Javascript
Javascript如何实现扩充基本类型
2020/08/26 Javascript
arcgis.js控制地图地体的显示范围超出区域自动弹回(实现思路)
2021/01/28 Javascript
JavaScript 获取滚动条位置并将页面滑动到锚点
2021/02/08 Javascript
Python使用PyGreSQL操作PostgreSQL数据库教程
2014/07/30 Python
Python socket实现简单聊天室
2018/04/01 Python
在Keras中CNN联合LSTM进行分类实例
2020/06/29 Python
Python gevent协程切换实现详解
2020/09/14 Python
导盲犬小Q观后感
2015/06/11 职场文书
庆祝教师节主持词
2015/07/06 职场文书
详解CSS玩转图片Base64编码
2021/05/25 HTML / CSS
SpringBoot前端后端分离之Nginx服务器下载安装过程
2022/08/14 Servers