数据库|Python操作MySQL、PostgreSQL关系型数据库

1.Python操作mysql关系型数据库

MySQL
是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件。MySQL是一种关系数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL 软件采用了双授权政策,分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择 MySQL 作为网站数据库。
  • 使用pymysql操作mysql数据库
    pip3 install PyMySQL

如果你的系统不支持 pip 命令,可以使用以下方式安装:
1、使用 git 命令下载安装包安装(你也可以手动下载):
$ git clone https://github.com/PyMySQL/PyMySQL $ cd PyMySQL/ $ python3 setup.py install

2、如果需要指定版本号,可以使用 curl 命令来安装:
$ # X.X 为 PyMySQL 的版本号 $ curl -L https://github.com/PyMySQL/PyMySQL/tarball/pymysql-X.X | tar xz $ cd PyMySQL* $ python3 setup.py install

  • mysql关系型数据库的安装
选择相应的版本进行安装https://dev.mysql.com/downloads/mysql/
centos7安装mysql
wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm
rpm -ivh mysql-community-release-el7-5.noarch.rpm
yum update
yum install mysql-server
权限设置:
chown mysql:mysql -R /var/lib/mysql
初始化 MySQL:
mysqld --initialize
启动 MySQL:
systemctl start mysqld
  • mysql关系型数据库的docker安装
    docker pull mysql docker run --name mysql -d --restart always -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -v /docker/mysql_data:/var/lib/mysql mysql

  • Python操作mysql关系型数据库
【数据库|Python操作MySQL、PostgreSQL关系型数据库】以下实例链接 Mysql 的 TESTDB 数据库:
实例(Python 3.0+)
#!/usr/bin/python3 import pymysql#打开数据库连接 db = pymysql.connect("localhost","testuser","test123","TESTDB" )#使用 cursor() 方法创建一个游标对象 cursor cursor = db.cursor()#使用 execute()方法执行 SQL 查询 cursor.execute("SELECT VERSION()")#使用 fetchone() 方法获取单条数据. data = https://www.it610.com/article/cursor.fetchone() print ("Database version : %s " % data)#关闭数据库连接 db.close()

创建数据库表
如果数据库连接存在我们可以使用execute()方法来为数据库创建表,如下所示创建表
EMPLOYEE:
实例(Python 3.0+)
#!/usr/bin/python3 import pymysql#打开数据库连接 db = pymysql.connect("localhost","testuser","test123","TESTDB" )#使用 cursor() 方法创建一个游标对象 cursor cursor = db.cursor()#使用 execute() 方法执行 SQL,如果表存在则删除cursor. execute("DROP TABLE IF EXISTS EMPLOYEE")#使用预处理语句创建表 sql = """CREATE TABLE EMPLOYEE ( FIRST_NAMECHAR(20) NOT NULL, LAST_NAMECHAR(20), AGE INT, SEX CHAR(1), INCOME FLOAT )""" cursor.execute(sql)# 关闭数据库连接 db.close()

数据库插入操作
#!/usr/bin/python3 import pymysql#打开数据库连接 db = pymysql.connect("localhost","testuser","test123","TESTDB" )#使用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) # 执行sql语句 db.commit() except:# 发生错误时回滚 db.rollback()#关闭数据库连接 db.close()

数据库查询操作
#!/usr/bin/python3 import pymysql#打开数据库连接 db = pymysql.connect("localhost","testuser","test123","TESTDB" )#使用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, se income ))except: print ("Error: unable to fetch data") # 关闭数据库连接 db.close()

数据库更新操作
#!/usr/bin/python3 import pymysql#打开数据库连接 db = pymysql.connect("localhost","testuser","test123","TESTDB" )#使用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()

数据库删除操作
#!/usr/bin/python3 import pymysql#打开数据库连接 db = pymysql.connect("localhost","testuser","test123","TESTDB" )#使用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()

2.Python操作PostgreSQL系型数据库
简介
PostgreSQL是自由的对象-关系型数据库服务器(数据库管理系统),在灵活的BSD许可证下发行。它在其他开放源代码数据库系统(比如MySQL和Firebird),和专有系统(比如Oracle、Sybase、IBM的DB2和Microsoft SQL Server)之外,为用户又提供了一种选择。
PostgreSQL不寻常的名字导致一些读者停下来尝试拼读它,特别是那些把SQL拼读为"sequel"的人。PostgreSQL开发者把它拼读为"post-gress-Q-L"。(Audio sample,5.6k MP3)。它也经常被简略念为"postgres"。
postgresql关系型数据库优点
从技术角度来讲,PostgreSQL 采用的是比较经典的C/S(client/server)结构,也就是一个客户端对应一个服务器端守护进程的模式,这个守护进程分析客户端来的查询请求,生成规划树,进行数据检索并最终把结果格式化输出后返回给客户端。为了便于客户端的程序的编写,由数据库服务器提供了统一的客户端 C 接口。而不同的客户端接口都是源自这个 C 接口,比如ODBC,JDBC,Python,Perl,Tcl,C/C++,ESQL等, 同时也要指出的是,PostgreSQL 对接口的支持也是非常丰富的,几乎支持所有类型的数据库客户端接口。这一点也可以说是 PostgreSQL 一大优点。
Postgresql的安装
选择对应的版本进行安装
数据库|Python操作MySQL、PostgreSQL关系型数据库
文章图片

Docker安装postgresql
一、安装
docker pull postgres:9.4

二、运行
docker run --name postgres1 -e POSTGRES_PASSWORD=password -p 5432:5432 -d postgres:9.4

解释:
run,创建并运行一个容器; --name,指定创建的容器的名字;-e POSTGRES_PASSWORD=password,设置环境变量,指定数据库的登录口令为password; -p 54321:5432,端口映射将容器的5432端口映射到外部机器的54321端口;-d postgres:9.4,指定使用postgres:9.4作为镜像。

注意:
postgres镜像默认的用户名为postgres,
登陆口令为创建容器时指定的值。
Python使用PostgreSQL
pip install psycopg2

#!/usr/bin/env python3 #-*- coding: utf-8 -*- import psycopg2 import sys con = Nonetry: con = psycopg2.connect(database='postgres', user='postgres', password='123') cur = con.cursor() cur.execute('SELECT version()') ver = cur.fetchone() print(ver) except psycopg2.DatabaseError as e: print('Error %s' % e) sys.exit(1) finally: if con: con.close()

python操作postgresql增删改查示例代码
#-*- coding: utf-8 -*- import psycopg2 dataBaseName = "weather" userName = "postgres" password = "postgres" host = "localhost" port = "5432" class PostGreSQL:#初始化 def __init__(self): self.dataBaseName = dataBaseName self.userName = userName self.password = password self.host = host self.port = port self._conn = self.GetConnect() if self._conn: self._cur = self._conn.cursor()#获取数据库连接对象 def GetConnect(self): conn = Falsetry: conn = psycopg2.connect( database=self.dataBaseName, user=self.userName, password=self.password, host=self.host, port=self.port ) except Exception as err: print("连接数据库失败,%s" % err) else: return conn#执行查询sql def ExecQuery(self,sql): res = "" try: self._cur.execute(sql) res = self._cur.fetchall() except Exception as err: print("查询失败, %s" % err) else: return res#执行增删改sql def ExceNonQuery(self,sql): flag = False try: self._cur.execute(sql) self._conn.commit() flag = True except Exception as err: flag = False self._conn.rollback() print("执行失败, %s" % err) else: return flagdef GetConnectInfo(self): print("连接信息:") print("服务器:%s , 用户名:%s , 数据库:%s " % (self.host, self.userName, self.dataBaseName))

    推荐阅读