首页 > 数据库 >sqlalchemy的快速使用

sqlalchemy的快速使用

时间:2024-03-07 17:24:08浏览次数:16  
标签:engine sqlalchemy cursor 线程 使用 import 快速 conn

sqlalchemy 是一个企业级的orm框架

类似于Django 的orm框架---》只能用在django框架中,不能用在别的位置

sqlalchemy可以单独使用,也可以用在其他框架中

安装

pip install sqlalchemy

SQLAlchemy本身无法操作数据库,其必须依赖pymsql等第三方插件

# Dialect用于和数据API进行交流,根据配置文件的不同调用不同的数据库API,从而实现对数据库的操作,如:
MySQL-Python
    mysql+mysqldb://<user>:<password>@<host>[:<port>]/<dbname>
    
pymysql
    mysql+pymysql://<username>:<password>@<host>/<dbname>[?<options>]
    
MySQL-Connector
    mysql+mysqlconnector://<user>:<password>@<host>[:<port>]/<dbname>
    
cx_Oracle
    oracle+cx_oracle://user:pass@host:port/dbname[?key=value&key=value...]
    
更多:http://docs.sqlalchemy.org/en/latest/dialects/index.html

sqlalchemy原生操作

# 操作原生sql ---》用得少
import pymysql
import threading

# 1 导入
from sqlalchemy import create_engine
from sqlalchemy.engine.base import Engine

# 2 创建引擎
engine = create_engine(
    "mysql+pymysql://root:[email protected]:3306/cnblogs",
    max_overflow=0,  # 超过连接池大小外最多创建的连接
    pool_size=5,     # 连接池大小
    pool_timeout=30,  # 池中没有线程最多等待的时间,否则报错
    pool_recycle=-1  # 多久之后对线程池中的线程进行一次连接的回收(重置)
)

# 3 使用引擎,拿到链接
conn = engine.raw_connection()

# 4 剩下的和操作pymysql一样
cursor=conn.cursor(pymysql.cursors.DictCursor)
cursor.execute('select * from article limit 10')
res=cursor.fetchall()

print(res)

## 多线程测试:
def task(arg):
    conn = engine.raw_connection()
    cursor = conn.cursor()
    cursor.execute(
        "select * from article"
    )
    result = cursor.fetchall()
    print(result)
    cursor.close()
    conn.close()

for i in range(20):
    t = threading.Thread(target=task, args=(i,))
    t.start()

sqlalchemy操作表

创建删除表

# 1 导入
import datetime
from sqlalchemy import create_engine
from sqlalchemy.orm import declarative_base
from sqlalchemy import Column, Integer, String, Text, ForeignKey, DateTime, UniqueConstraint, Index

Base = declarative_base()  # Base 当成 models.Model

# 2 创建表模型
class User(Base):
    __tablename__ = 'users'  # 表名
    # 写字段
    id = Column(Integer, primary_key=True, autoincrement=True)  # id 主键
    name = Column(String(32), index=True, nullable=False)  # name列,索引,不可为空
    email = Column(String(32), unique=True)
    # datetime.datetime.now不能加括号,加了括号,以后永远是当前时间
    ctime = Column(DateTime, default=datetime.datetime.now)
    extra = Column(Text)

# 3 没有命令---》后期使用第三方模块,可以有命令
# 目前需要手动做
# sqlalchemy 不能创建数据库,能创建表,删除表,不能删除增加字段(第三方模块)

# 3.1 创建引擎
engine = create_engine(
    "mysql+pymysql://root:[email protected]:3306/sqlalchemy01",
    max_overflow=0,  # 超过连接池大小外最多创建的连接
    pool_size=5,  # 连接池大小
    pool_timeout=30,  # 池中没有线程最多等待的时间,否则报错
    pool_recycle=-1  # 多久之后对线程池中的线程进行一次连接的回收(重置)
)

# 3.2 把表模型同步到数据库中
Base.metadata.create_all(engine)

# 3.3 删除表
Base.metadata.drop_all(engine)

简单增删改查操作

from models import User

from sqlalchemy import create_engine

# 1 创建引擎
engine = create_engine(
    "mysql+pymysql://root:[email protected]:3306/sqlalchemy01",
    max_overflow=0,  # 超过连接池大小外最多创建的连接
    pool_size=5,  # 连接池大小
    pool_timeout=30,  # 池中没有线程最多等待的时间,否则报错
    pool_recycle=-1  # 多久之后对线程池中的线程进行一次连接的回收(重置)
)

# 2 orm操作--》借助于 engine 得到session(conn)对象
from sqlalchemy.orm import sessionmaker

Connection = sessionmaker(bind=engine)
conn = Connection()

# 3 使用conn---》进行orm操作
# 3.1 增加数据
user = User(name='xxx', email='[email protected]')
# 插入到数据库
conn.add(user)  # 放个对象
# 提交
conn.commit()
# 关闭链接
conn.close()

# 3.2 查询数据
# 查询User表中id为1的所有记录--》放到列表中
res=conn.query(User).filter_by(id=1).all()
print(res)

# 3.3 删除
res = conn.query(User).filter_by(name='lqz').delete()
print(res)
conn.commit()

# 3.4 修改
res=conn.query(User).filter_by(name='9999').update({'extra':'xxsss'})
conn.commit()

标签:engine,sqlalchemy,cursor,线程,使用,import,快速,conn
From: https://www.cnblogs.com/wellplayed/p/18059349

相关文章

  • MATLAB基本使用及SIMULINK建模仿真实验
    这是我总结的操作方法:1) M脚本文件的编写1、新建M-file;2、输入指令;3、保存(注意:保存路径需要与工作路径一致) 2)在SIMULINK中创建系统模型的步骤1、新建一个空白的 模型窗口。2、在SIMULINK模块库浏览器中,将创建系统模型所需要的功能模块用鼠标拖放到新建的模型窗口中......
  • linux 入门(七)-ffmpeg使用
    linux入门(七)1:安装ffmpegubuntu下安装ffmpeg:sudoapt-getinstallffmpeg2:ffmpeg--helpffmpegversion4.2.7-0ubuntu0.1Copyright(c)2000-2022theFFmpegdevelopersbuiltwithgcc9(Ubuntu9.4.0-1ubuntu1~20.04.1)configuration:--prefix=/usr--ex......
  • APP开发好后如何快速进行内测分发
    在APP开发过程中,内测是非常关键的一环。内测不仅能够帮助开发团队发现潜在的问题,还能确保应用在正式上线前具备良好的用户体验。那么,APP开发好后如何快速进行内测呢?今天,我将为大家分享一些实用的经验和建议,并带大家了解虾分发平台xiafenfa.com,它将成为您APP内测的强大后盾。首先,......
  • java使用ssh通道连接mysql
    添加依赖<dependency><groupId>com.jcraft</groupId><artifactId>jsch</artifactId><version>0.1.55</version></dependency>添加配置importcom.jcraft.jsch.JSch;......
  • [转载]pip 下载安装时使用清华大学镜像(各种国内源配置)
    版权声明:本文为博主原创文章,遵循CC4.0BY-SA版权协议,转载请附上原文出处链接和本声明。原文链接:https://blog.csdn.net/sjjsaaaa/article/details/110096059————————————————清华镜像地址:https://pypi.tuna.tsinghua.edu.cn/simple例如:假设要安装numpy......
  • this指针的使用
    c++提供特殊的对象指针,也就是this指针,this指针指向被调用的成员函数所属的对象this指针是隐含每一个非静态成员函数内的一种指针this函数不需要定义,直接使用即可 this指针的用途:当形参和成员变量同名时,可用this指针来区分在类的非静态成员函数中返回对象本身,可使用return......
  • 实体类与数据库的直接交互问题,DTO,AutoMapper的使用
    实体类、DTO与数据库交互的最佳实践实体类与数据库的直接交互问题在软件开发中,实体类通常被设计为反映业务域的数据模型。这些实体类可能包含以下元素:特性(Attributes):用于定义实体属性的额外信息,比如数据验证规则或ORM(对象关系映射)框架的映射信息。继承关系:实体之间可能存......
  • css样式属性 使用汇总,补齐前端短板
    ---------------index.css常用网站css样式属性使用汇总1-------------/*先删除默认的内外边距*/*{margin:0;padding:0;}body{background-color:#fafafa;height:2000px;}li{list-style:none;/*取消li的符号*/}/*顶部导航栏开......
  • git merge请使用 `--no-ff`
    三种模式fast-forward--squash--no-fffast-forwardGit合并两个分支时,如果顺着feature分支走下去可以到达main分支的话(main分支在feature分支开发期间没有新的提交),那么Git在合并两者时,只会简单地把指针右移,叫做“快进”(fast-forward)。一旦删除分支或者分支指针往前走,很......
  • 记录一次使用ddrescue从有坏道的磁盘恢复数据
    《记录一次使用ddrescue从有坏道的磁盘恢复数据》ddrescue是Linux和类Unix系统中的一个命令行工具,用于数据恢复。与传统的dd命令不同,ddrescue设计用于从有问题的存储设备(如硬盘、闪存等)中恢复数据,即使存在坏块或读取错误也能继续复制数据。它使用日志文件来记录哪些数据块已成功......