加入收藏 | 设为首页 | 会员中心 | 我要投稿 北几岛 (https://www.beijidao.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Python3 连接各类数据库(Mysql、Mssql、Oracle)

发布时间:2021-05-21 04:54:34 所属栏目:大数据 来源: https://blog.csdn.net/yilovex
导读:一、MysqL 1. 安装 PyMysqL 库 pip3 install pyMysqL 2. 连接数据库的几种方法 connect()方法用于连接数据库 第一种:将各类字段写上 db = pyMysqL.connect(host="localhost",port=3306,user="root",passwd="root",db="Geek_Web",charset="utf8mb4") 第二种

一、MysqL

1. 安装 PyMysqL 库

pip3 install pyMysqL

2. 连接数据库的几种方法

connect()方法用于连接数据库

第一种:将各类字段写上

db = pyMysqL.connect(host="localhost",port=3306,user="root",passwd="root",db="Geek_Web",charset="utf8mb4")

第二种:省略字段

db = pyMysqL.connect(root,root,Geek_Web)

第三种:构建配置文件

config = { 

'host':'localhost','port':3306,'user':'root','passwd':'root','db':'Geek_Web','charset':'utf8mb4',}

db = pyMysqL.connect(**config)

3. 操作数据库

cursor = db.cursor()        # cursor() 方法获取操作游标
sql = "SELECT * FROM main"
cursor.execute(sql)         # 执行sql语句
results = cursor.fetchall() # 获取所有记录列表
results = cursor.fetchone() # 获取一条记录列表
db.commit()                 # 没有设置默认自动提交,需要主动提交,以保存所执行的语句
                                # 除了查询其他操作都需要保存执行
cursor.close()
db.close()                  # 关闭数据库连接

4. PyMysqL 返回字典数据

PyMysqL 默认返回是元组,有时候需要返回数据库的字段,需要把 Key 也返回及返回字典类型

# 在连接数据库时候加上 cursorclass 就可以数据库内容以字典格式返回
cursorclass=pyMysqL.cursors.DictCursor

5. 源码实例

#!/usr/bin/env python3
# -*- coding: UTF-8 -*-

# 安装PyMysqL
# sudo pip install PyMysqL

import pyMysqL


config = {

    'host':'localhost',# 数据库内容以字典格式输出
    #'cursorclass':pyMysqL.cursors.DictCursor,}

# 连接数据库
def MysqL():
    # 连接数据库
    #db = pyMysqL.connect(host="localhost",charset="utf8mb4")
    db = pyMysqL.connect(**config)
    #cursor()方法获取操作游标 
    cursor = db.cursor()

    try:

        return (db,cursor)

    except:

        print("数据库访问失败")

# 增
def Insert(db,cursor):
    sql = "insert into main(id,Tag,Name,Version,Introduce,Class,Worked_OS,Course_URL,Download_URL,Image_URL,Remarks_1,Remarks_2) 
     values (NULL,'软件编号','软件名称','软件版本','软件简介','软件类别','运行环境','教程地址','下载地址','图标地址','备注1','备注2')"
    # 执行sql语句
    cursor.execute(sql)
    # 没有设置默认自动提交,需要主动提交,以保存所执行的语句
    db.commit()

# 删
def Delect(db,cursor):
    sql = "DELETE FROM main WHERE Name = '修改后的名字'"
    cursor.execute(sql)
    db.commit()

# 查
def Select(db,cursor):
    sql = "SELECT * FROM main"
    cursor.execute(sql)
    # 获取所有记录列表
    results = cursor.fetchall()

    return results

# 改
def Update(db,cursor):
    sql = "UPDATE main SET Name = '修改后的名字' WHERE Remarks_2 = '备注2'"
    cursor.execute(sql)
    db.commit()

# 关闭数据库连接
def Close(db,cursor):
    cursor.close()
    db.close()

(db,cursor) = MysqL()
print("n-------------数据库初始状态-------------")
print(Select(db,cursor))
Insert(db,cursor)
print("n-------------数据库插入数据-------------")
print(Select(db,cursor))
Update(db,cursor)
print("n-------------数据库修改数据-------------")
print(Select(db,cursor))
Delect(db,cursor)
print("n-------------数据库删除数据-------------")
print(Select(db,cursor))
Close(db,cursor)

6. PyMysqL 参数

connect() 参数
@H_502_72@
  • host 连接的数据库服务器主机名 默认为本地主机(localhost)
  • user 连接数据库的用户名 默认为当前用户
  • passwd 连接密码 没有默认值
  • db 连接的数据库名 没有默认值
  • conv 将文字映射到Python类型的字典默认为MysqLdb.converters.conversions
  • cursorclass cursor()使用的种类 默认值为MysqLdb.cursors.Cursor
  • compress 启用协议压缩功能
  • named_pipe 在windows中 与一个命名管道相连接
  • init_command 一旦连接建立 就为数据库服务器指定一条语句来运行
  • readdefaultfile 使用指定的MysqL配置文件
  • readdefaultgroup 读取的默认组
  • unix_socket 在unix中 连接使用的套接字 默认使用TCP
  • port 指定数据库服务器的连接端口 默认是3306
  • 连接对象方法
    @H_502_72@
  • 连接对象的 db.close() 方法可关闭数据库连接 并释放相关资源?
  • 连接对象的 db.cursor([cursorClass]) 方法返回一个指针对象 用于访问和操作数据库中的数据?
  • 连接对象的 db.begin() 方法用于开始一个事务 如果数据库的AUTOCOMMIT已经开启就关闭它 直到事务调用commit()和rollback()结束
  • 连接对象的 db.commit() 和db.rollback()方法分别表示事务提交和回退
  • 指针对象方法
    @H_502_72@
  • 指针对象的 cursor.close() 方法关闭指针并释放相关资源
  • 指针对象的 cursor.execute(query[,parameters]) 方法执行数据库查询
  • 指针对象的 cursor.fetchall() 可取出指针结果集中的所有行 返回的结果集一个元组(tuples)
  • 指针对象的 cursor.fetchmany([size=cursor.arraysize])从查询结果集中取出多行 我们可利用可选的参数指定取出的行数?
  • 指针对象的 cursor.fetchone() 从查询结果集中返回下一行
  • 指针对象的 cursor.arraysize 属性指定由cursor.fetchmany()方法返回行的数目 影响fetchall()的性能 默认值为1?
  • 指针对象的 cursor.rowcount 属性指出上次查询或更新所发生行数-1表示还没开始查询或没有查询到数据
  • 二、Mssql

    1. 安装 PyMssql 库

    pip3 install pyMysqL

    2. 连接数据库的方法

    Mssql 用字典配置不可以用,connect() 用来连接数据库

    db = pymssql.connect(host="192.0.0.200",user="ymyg",password="ymyg",database="Geek_Web")

    3. 操作数据库

    和 MysqL 操作方法一模一样,只不过将 PyMysqL 改为 PyMssql 即可,参考上面 PyMssql

    4. PyMssql 返回字典数据

    只需要在连接数据库时候加上一个 as_dict 字段,将值改为 True 即可

    db = pymssql.connect(host="192.0.0.200",database="Geek_Web",as_dict=True)

    5. PyMssql 参数

    connect() 参数
    @H_502_72@
  • dsn 连接字符串 主要用于与之前版本的pymssql兼容
  • user 用户名
  • password 密码
  • trusted 布尔值 指定是否使用windows身份认证登陆
  • host 主机名
  • database 数据库
  • timeout 查询超时
  • login_timeout 登陆超时
  • charset 数据库的字符集
  • as_dict 布尔值 指定返回值是字典还是元组
  • max_conn 最大连接数
  • 操作方法
    @H_502_72@
  • close() 关闭游标
  • execute(operation) 执行操作
  • execute(operation params) 执行操作 可以提供参数进行相应操作
  • executemany(operation paramsseq) 执行操作 Paramsseq 为元组
  • fetchone() 在结果中读取下一行
  • fetchmany(size=None) 在结果中读取指定数目的行
  • fetchall() 读取所有行
  • nextset() 游标跳转到下一个数据集
  • 其他方法
    @H_502_72@
  • autocommit(status) 布尔值 指示是否自动提交事务 默认的状态是关闭的 如果打开 你必须调用commit()方法来提交事务
  • close() 关闭连接
  • cursor() 返回游标对象 用于查询和返回数据
  • commit() 提交事务
  • rollback() 回滚事务
  • pymssqlCursor类 用于从数据库查询和返回数据
  • rowcount 返回最后操作影响的行数?
  • connection 返回创建游标的连接对象
  • lastrowid 返回插入的最后一行
  • rownumber 返回当前数据集中的游标(通过索引)
  • 6. PyMssql 配置文件

    在开源库目录下找到 freetds.conf 打开

    # $Id: freetds.conf,v 1.12 2007/12/25 06:02:36 jklowden Exp $
    #
    # This file is installed by FreeTDS if no file by the same 
    # name is found in the installation directory.  
    #
    # For information about the layout of this file and its settings,# see the freetds.conf manpage "man freetds.conf".  
    
    # Global settings are overridden by those in a database
    # server specific section
    [global]
           # TDS protocol version
    ;tds version = 4.2
    
    # Whether to write a TDSDUMP file for diagnostic purposes
    # (setting this to /tmp is insecure on a multi-user system)
    ;dump file = /tmp/freetds.log
    ;debug flags = 0xffff
    # Command and connection timeouts
    ;timeout = 10
    
    ;connect timeout = 10
    
    # If you get out-of-memory errors,it may mean that your client
    # is trying to allocate a huge buffer for a TEXT field.  
    # Try setting 'text size' to a more reasonable limit 
    text size = 64512
    
    # A typical Sybase server#newadd
    [test_db]
          host = 127.0.0.1
          port = 1433
          tds version = 8.0
          client charset = GBK

    一、Oracle

    1. 安装 cx_Oracle 库

    pip3 install cx_Oracle

    2. 连接数据库的几种方法

    第一种:Oracle 连接方法

    db = cx_Oracle.connect('root/root@localhost: 1523/orcl')

    第二种:省略字段连接方法

    db = cx_Oracle.connect('root','root','localhost: 1523/orcl')

    第三种:dsn 方法

    makedsn(IP/HOST,PORT,TNSNAME)
    dsn = cx_Oracle.makedsn('localhost','1523','orcl')
    db = cx_Oracle.connect('root',dsn)

    3. 操作数据库

    和 MysqL 操作方法一模一样,只不过将 PyMysqL 改为 cx_Oracle 即可,参考上面 PyMssql

    4. PyMssql 返回字典数据

    Oracle 返回字典类型比较麻烦,因为 cx_Oracle 没有集成,所以需要我们自己写返回字典的方法

    cx_Oracle 的 Cursor 对象有一个属性 rowfactory 是是用来自定义查询结果的预处理方法的,定义一个闭包

    def makedict(cursor):
         cols = [d[0] for d in cursor.description] 
         def createrow(*args):
             return dict(zip(cols,args))
         return createrow

    并将其注册给游标对象的rowfactory属性?cursor.rowfactory = makedict(cursor)?得到的结果自动由元组转为字典了

    但要注意,注册的动作需要在每次执行 cursor.execute 之后都重复一次。最终的方法是定义了一个类来继承 Cursor 对象,这样就不需要重复注册了

    5. cx_Oracle 参数

    >_< 翻遍了 Google 和 度娘 都没找到完整的参数,英文太烂、时间紧迫没时间看官方文档,望有吊大的知情人士望告知






    连接 MysqL:http://www.jb51.net/article/103382.htm

    连接 sqlServer:http://blog.csdn.net/wanzhuan2010/article/details/18844789

    连接 Oracle:http://blog.csdn.net/baidu_15113429/article/details/53788520

    Oracle 返回字典:http://blog.csdn.net/yilovexing/article/details/78042904

    https://ask.helplib.com/1400253

    (编辑:北几岛)

    【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

      推荐文章
        热点阅读