博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SQLAchemy基础知识
阅读量:6692 次
发布时间:2019-06-25

本文共 3611 字,大约阅读时间需要 12 分钟。

  一、什么是SQLAchemy?

  SQLAlchemy是编程语言下的一款ORM框架,该框架建立在数据库API之上,使用关系对象映射进行数据库操作,简言之便是:将对象转换成SQL,然后使用数据API执行SQL并获取执行结果。

  1、安装SQLAlchemy

pip3 install SQLAlchemy

  SQLAlchemy本身无法操作数据库,其必须以来pymsql等第三方插件,Dialect用于和数据API进行交流,根据配置文件的不同调用不同的数据库API,从而实现对数据库的操作,如:

MySQL-Python    mysql+mysqldb://用户名:密码(无密码为空)@
[:
]/
pymysql mysql+pymysql://用户名:密码(无密码为空)@
/
[?
] MySQL-Connector mysql+mysqlconnector://用户名:密码(无密码为空)@
[:
]/
cx_Oracle oracle+cx_oracle://用户名:密码(无密码为空)@host:port/dbname[?key=value&key=value...] 更多详见:http://docs.sqlalchemy.org/en/latest/dialects/index.html

  二、ORM的使用机制

  orm 通过 Engine/ConnectionPooling/Dialect 进行数据库操作,Engine使用ConnectionPooling连接数据库,然后再通过Dialect执行SQL语句。

from sqlalchemy import create_engine# 基于pymysql连接数据库engine=create_engine("mysql+pymysql://root:@127.0.0.1:3306/db4?charset=utf8",max_overflow=5)#  创造出类Session=sessionmaker(bind=engine)#  实例化出对象session=Session()#  对象的方法#1、增:#    增加一行数据:obj=表名(列名1=值1,列名2=值2...)session.add(obj)    #    增加多行数据:objs=[    表名(列名1=值1,列名2=值2...),    表名(列名1=值1,列名2=值2...),    表名(列名1=值1,列名2=值2...),    ...]session.add_all(objs)#2、删:session.query(表名).delete()session.query(表名).filter(条件表达式).delete()#3、改:session.query(表名).filter(条件表达式).update({
"列名1":"更新的值1","列名2":"更新的值2",...})session.query(表名).filter(条件表达式).update({表名.列名1:值1+"str1",表名.列名2:值2+"str2",...},synchronize_session=False)#支持字符串拼接session.query(表名).filter(条件表达式).update({表名.列名1:num1+1,表名.列名2:num2+1,...},synchronize_session=evaluate)#支持值为数字的数学运算#4、 查:变量名=session.query(表名).filter(条件表达式).all()for row in 变量名: print(row.列名1,row.列名2...)
orm相关语法

  使用 ORM/Schema Type/SQL Expression Language/Engine/ConnectionPooling/Dialect 所有组件对数据进行操作。根据类创建对象,对象转换成SQL,执行SQL。

from sqlalchemy.ext.declarative import declarative_basefrom sqlalchemy import Column, Integer, String, ForeignKey, UniqueConstraint, Indexfrom sqlalchemy.orm import sessionmaker, relationshipfrom sqlalchemy import create_engine engine = create_engine("mysql+pymysql://root:123@127.0.0.1:3306/t1", max_overflow=5) Base = declarative_base() # 创建单表class Users(Base):    __tablename__ = 'users'    id = Column(Integer, primary_key=True)    name = Column(String(32))    extra = Column(String(16))     __table_args__ = (    UniqueConstraint('id', 'name', name='uix_id_name'),        Index('ix_id_name', 'name', 'extra'),    )  # 一对多class Favor(Base):    __tablename__ = 'favor'    nid = Column(Integer, primary_key=True)    caption = Column(String(50), default='red', unique=True)  class Person(Base):    __tablename__ = 'person'    nid = Column(Integer, primary_key=True)    name = Column(String(32), index=True, nullable=True)    favor_id = Column(Integer, ForeignKey("favor.nid"))  # 多对多class Group(Base):    __tablename__ = 'group'    id = Column(Integer, primary_key=True)    name = Column(String(64), unique=True, nullable=False)    port = Column(Integer, default=22)  class Server(Base):    __tablename__ = 'server'     id = Column(Integer, primary_key=True, autoincrement=True)    hostname = Column(String(64), unique=True, nullable=False)  class ServerToGroup(Base):    __tablename__ = 'servertogroup'    nid = Column(Integer, primary_key=True, autoincrement=True)    server_id = Column(Integer, ForeignKey('server.id'))    group_id = Column(Integer, ForeignKey('group.id'))  def init_db():    Base.metadata.create_all(engine)  def drop_db():    Base.metadata.drop_all(engine)注:设置外键的另一种方式 ForeignKeyConstraint(['other_id'], ['othertable.other_id'])
创建表

 

  

 

转载于:https://www.cnblogs.com/Michael--chen/p/7003342.html

你可能感兴趣的文章
php多态设计
查看>>
mvc伪静态<三> IIS配置
查看>>
android自定义radiobutton样式文字颜色随选中状态而改变
查看>>
【CodeForces 604B】F - 一般水的题1-More Cowbe
查看>>
wxPython 4.0.0b2安装
查看>>
Android RecyclerView利用Glide加载大量图片into(Target)导致OOM异常
查看>>
UGUI表情系统解决方案
查看>>
HTTP Health Checks
查看>>
为什么正态分布如此普遍
查看>>
jQuery事件
查看>>
BBS论坛(三十)
查看>>
轻松看懂Java字节码
查看>>
AE TIN的切割
查看>>
ASP.NET图片上传,删除
查看>>
Visual Studio 2010 创建的WCF服务 第一个应用
查看>>
2016第42周五
查看>>
centos7 取消自动锁屏
查看>>
在IDEA中代码自动提示第一个字母大小写必须匹配的解决
查看>>
面向接口编程的好处和优点
查看>>
架构师必看-架构之美第14章-两个系统的故事:设计之城(一)
查看>>