码农知识堂 - 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
  • 相关阅读:
    TCP BBR 短评
    SQL注入——搜索型
    CUMT-----Java课后第七章编程作业
    web站点的欢迎页面
    下一代实时数据库:Apache Doris 【五】数据表的创建
    原神服务器服务端多人联机教程
    【Python合集系列】也许每个人的童年里都有过这样一个梦:“书桌会被推开钻出来一个哆啦A梦”。(源码合集)
    物联网通信协议-MQTT及使用python实现
    前端与后端如何开发不阻塞?
    【阿旭机器学习实战】【22】特征降维实战---主成分分析(PCA)与线性判别分析算法(LDA)
  • 原文地址:https://blog.csdn.net/baidu_38766791/article/details/127462344
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号