码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • sqlalchemy_No2_创建数据库引擎


    目录

    • 数据库Engine介绍
    • 创建语法
      • 处理DBURL中特殊字符编码问题
      • 连接池相关参数说明
    • 常见数据库连接的URL
      • PostgreSQL
      • MySQL
      • Oracle
      • Microsoft SQL Server

    数据库Engine介绍

    Engine是所有SQLAlchemy应用的入口。Engine通过Pool和Dialect确定连接哪种类型数据库(mysql,sqlserver…)。
    在这里插入图片描述

    创建语法

    create_engine("dialect+driver😕/username:pasword@host:port/database
    dialect+driver用于创建一个Dialect对象,host:port用于创建一个Pool对象。

    延迟初始化行为
    Engine和Pool对象创建后并非直接和DBAPI进行了连接,只有当执行Engine.connect()或Engine.execute()方法后才真正连接。

    Engine既可以直接与数据库进行通信(原生SQL模式),也可以将其传递给Session对象以使用ORM(ORM模式)。

    处理DBURL中特殊字符编码问题

    当DBURL中存的密码部分存在特殊字符时需要通过编码后将其传入,否则会导致DBURL解析失败。

    from sqlalchemy import create_engine
    # 演示当密码中包含@和/特殊字符时导致创建Engine对象失败
    dburl = "mysql+pymysql://testuser:123@456/!@127.0.0.1:3306/dbtest1"
    engine = create_engine(url=dburl,encoding='utf8')
    print(engine.connect())
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在这里插入图片描述
    为了解决这个问题,可以先将带有特殊字符的密码部分进行编码,然后将编码后的密码传入url中。

    from sqlalchemy import create_engine
    import urllib.parse 
    # 对还有特殊字符的密码进行编码
    def encode_pwd(pwd:str) -> str:
        encode_password = urllib.parse.quote_plus(pwd)
        print(encode_password)
        return encode_password
    # 生成dburl
    def get_dburl(pwd:str) -> str:
        password = encode_pwd(pwd)
        return f"mysql+pymysql://testuser:{password}@127.0.0.1:3306/dbtest1"
    
    engine = create_engine(url=get_dburl('123@456/!'),encoding='utf8')
    print(engine.connect())
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    在这里插入图片描述

    连接池相关参数说明

    这部分参数说明,可查看官方API文档。

    常见数据库连接的URL

    PostgreSQL

    # default == psycopg2
    engine = create_engine("postgresql://scott:tiger@localhost/mydatabase")
    
    # psycopg2
    engine = create_engine("postgresql+psycopg2://scott:tiger@localhost/mydatabase")
    
    # pg8000
    engine = create_engine("postgresql+pg8000://scott:tiger@localhost/mydatabase")
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    MySQL

    # default == mysqlclient
    engine = create_engine("mysql://scott:tiger@localhost/foo")
    
    # mysqlclient (a maintained fork of MySQL-Python)
    engine = create_engine("mysql+mysqldb://scott:tiger@localhost/foo")
    
    # PyMySQL
    engine = create_engine("mysql+pymysql://scott:tiger@localhost/foo")
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    Oracle

    engine = create_engine("oracle://scott:tiger@127.0.0.1:1521/sidname")
    
    engine = create_engine("oracle+cx_oracle://scott:tiger@tnsname")
    
    • 1
    • 2
    • 3

    Microsoft SQL Server

    # pyodbc == default
    engine = create_engine("mssql+pyodbc://scott:tiger@mydsn")
    
    # pymssql
    engine = create_engine("mssql+pymssql://scott:tiger@hostname:port/dbname")
    
    • 1
    • 2
    • 3
    • 4
    • 5
  • 相关阅读:
    C# OpenCvSharp 图片模糊检测(拉普拉斯算子)
    Leetcode Daily Challenge 1845. Seat Reservation Manager
    Python数据攻略-SQL和Mongodb的CRUD方法汇总
    Web Components从技术解析到生态应用个人心得指北
    Mac 下安装golang环境
    20道常见的kafka面试题以及答案
    3038. 相同分数的最大操作数目 I(Rust模拟击败100%Rust用户)
    IDEA工具第二篇:自定义Java方法注释模板 | 京东云技术团队
    基于 jetpack compose,使用MVI架构+自定义布局实现的康威生命游戏
    在外网环境中如何通过vpn接入到openstack的内部用户网络中
  • 原文地址:https://blog.csdn.net/baidu_38766791/article/details/127462344
  • 最新文章
  • 【JVM】编译执行与解释执行的区别是什么?JVM 使用哪种方式?
    用 Hashids 优雅解决 C 端自增 ID 暴露问题
    V8引擎 精品漫游指南--Ignition篇(上) 指令 栈帧 槽位 调用约定 内存布局 基础内容
    LLVM Pass快速入门(四):代码插桩
    milkup:桌面端 markdown AI续写和即时渲染
    基于项目工程构建SBOM(软件物料清单)的研究
    鸿蒙应用开发UI基础第二节:鸿蒙应用程序框架核心解析与实操
    .NET 中如何快速实现 List 集合去重?
    扣子Coze实战:从0到1打造抖音+小红书热点监控智能体
    浅谈数据访问层
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号