ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

SQLAlchemy

2019-07-22 21:02:19  阅读:370  来源: 互联网

标签:__ engine SQLAlchemy Users 数据库 mysql name


一、介绍

#SQLAlchemy  ORM框架

功能:类/对象操作 -> SQL ->pymysql、mySQLdb ->再去数据库中执行

pip3 install sqlalchemy

 

 

 

 

组成部分

#Engine,        框架的引擎
#Connection Pooling ,数据库连接池
#Dialect         选择连接数据库的DB API种类
#Schema/Types,    架构和类型
#SQL Exprression Language,SQL表达式语言

Dialect(方言)

    #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...]
View Code

 

 

二、基本使用(能创建表,删除表,不能修改表)

注:不能修改表,指的是不能修改表字段,添加删除字段

#__tablename__  数据库表名称

#__table_args__ 数据库表的其他信息,联合唯一,字符编码等

models.py

最最基本的格式
Base = declarative_base()

class Users(Base):    #添加字段

def init_db():      #根据类创建数据可

def drop_db():   #根据类删除数据库表

if __name__ == '__main__':
    # drop_db()    #删除表,慎重
    init_db()
-------------------------------------------------------------------

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)  # id 主键
    name = Column(String(32), index=True, nullable=False)  # name列,索引,不可为空
    age = Column(Integer)


    __table_args__ = {
        # UniqueConstraint('id', 'name', name='uix_id_name'), #联合唯一
        # Index('ix_id_name', 'name', 'email'), #索引
        # 'mysql_engine': 'InnoDB',     
        # 'mysql_charset': 'utf8'}




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

    Base.metadata.create_all(engine)


#根据类删除数据库表
def drop_db():
    engine = create_engine(
        "mysql+pymysql://root:123456@127.0.0.1:3306/aaa?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()
    
View Code

 

app.py

from sqlalchemy.orm import sessionmaker
from sqlalchemy import create_engine
from models import Users
#"mysql+pymysql://root@127.0.0.1:3306/aaa"
engine = create_engine("mysql+pymysql://root:123456@127.0.0.1:3306/aaa", max_overflow=0, pool_size=5)
Connection = sessionmaker(bind=engine)

# 每次执行数据库操作时,都需要创建一个Connection
con = Connection()

# ############# 执行ORM操作 #############
obj1 = Users(name="lqz")
con.add(obj1)
# 提交事务
con.commit()

# 关闭session,其实是将连接放回连接池
con.close()
View Code

增删改查

#----------------------------增
"""
注意最后提交事务
add增加单个,
add_all批量增加,注意放到列表中
"""
    
obj1 = Users(name="lqz",age=18)
con.add(obj1)
# 提交事务
con.commit()

obj2=Users(name='p1',age=1)
obj3=Users(name='p2',age=2)
obj4=Users(name='p2',age=3)
obj5=Users(name='p4',age=4)
con.add_all([obj2,obj3,obj4,obj5])
con.commit()


#------------------------------------查
View Code

 

标签:__,engine,SQLAlchemy,Users,数据库,mysql,name
来源: https://www.cnblogs.com/pdun/p/11228324.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有