当前位置:Gxlcms > 数据库问题 > SQLALchemy之介绍,基本使用

SQLALchemy之介绍,基本使用

时间:2021-07-01 10:21:17 帮助过:37人阅读

import time
import threading
import sqlalchemy
from sqlalchemy import create_engine
from sqlalchemy.engine.base import Engine
 
engine = create_engine(
    "mysql+pymysql://root:123@127.0.0.1:3306/t1?charset=utf8",
    max_overflow=0,  # 超过连接池大小外最多创建的连接
    pool_size=5,  # 连接池大小
    pool_timeout=30,  # 池中没有线程最多等待的时间,否则报错
    pool_recycle=-1  # 多久之后对线程池中的线程进行一次连接的回收(重置)
)
 
 
def task(arg):
    conn = engine.raw_connection()
    cursor = conn.cursor()
    cursor.execute(
        "select * from t1"
    )
    result = cursor.fetchall()
    cursor.close()
    conn.close()
 
 
for i in range(20):
    t = threading.Thread(target=task, args=(i,))
    t.start()
技术分享图片

 

2、创建单表

因为SQLALchemy不能连接数据库,所以创建表的操作得我们自已用方法实现

技术分享图片
import datetime
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String, Text, ForeignKey, DateTime, UniqueConstraint, Index

Base = declarative_base()


class Users(Base):
    # 设置表名
    __tablename__ = ‘users‘
    # 设置表的字段
    # 主键
    id = Column(Integer, primary_key=True)
    # 设置字符串类型,最大长度是32,添加索引index
    name = Column(String(32), index=True, nullable=False)
    # email = Column(String(32), unique=True)
    # ctime = Column(DateTime, default=datetime.datetime.now)
    # extra = Column(Text, nullable=True)

    __table_args__ = (
        # 还可以设置联合唯一
        # UniqueConstraint(‘id‘, ‘name‘, name=‘uix_id_name‘),
        # 设置联合索引
        # Index(‘ix_id_name‘, ‘name‘, ‘email‘),
    )


def init_db():
    """
    根据类创建数据库表
    :return: 
    """
    engine = create_engine(
        "mysql+pymysql://root:123@127.0.0.1:3306/s6?charset=utf8",
        max_overflow=0,  # 超过连接池大小外最多创建的连接
        pool_size=5,  # 连接池大小
        pool_timeout=30,  # 池中没有线程最多等待的时间,否则报错
        pool_recycle=-1  # 多久之后对线程池中的线程进行一次连接的回收(重置)
    )

    # 这个方法就是帮我们做创建表的
    Base.metadata.create_all(engine)


def drop_db():
    """
    根据类删除数据库表
    :return: 
    """
    engine = create_engine(
        "mysql+pymysql://root:123@127.0.0.1:3306/s6?charset=utf8",
        max_overflow=0,  # 超过连接池大小外最多创建的连接
        pool_size=5,  # 连接池大小
        pool_timeout=30,  # 池中没有线程最多等待的时间,否则报错
        pool_recycle=-1  # 多久之后对线程池中的线程进行一次连接的回收(重置)
    )

    # 这个方法就是删除表
    Base.metadata.drop_all(engine)


if __name__ == ‘__main__‘:
    # 要自己调用才能完成创建表和删除表的操作
    drop_db()
    init_db()
技术分享图片

 

3、操作单表

(1)添加一条记录

技术分享图片
from sqlalchemy.orm import sessionmaker
from sqlalchemy import create_engine
from models import Users
  
engine = create_engine("mysql+pymysql://root:123@127.0.0.1:3306/s6", max_overflow=0, pool_size=5)
Session = sessionmaker(bind=engine)
  
# 每次执行数据库操作时,都需要创建一个session
session = Session()
  
# ############# 执行ORM操作 #############
# 添加一条记录,也就是实例化一个对象
obj1 = Users(name="alex1")
session.add(obj1)
  
# 提交事务
session.commit()
# 关闭session
session.close()
技术分享图片

SQLALchemy之介绍,基本使用

标签:第三方   index   执行sql   bind   创建数据库   没有   cursor   结果   gif   

人气教程排行