在SQLAlchemy ORM中动态变更表名

摘要:
来自sqlalchemy.ormimportsessionmakermetadata=来自sqlalchmy.ext.declarativeeimportdeclarative_baseBase=declarative_base()classUser(base):'mysql_charset':'utf8'}id=列(整数,

在开发过程中,经常会遇到几张表结构相同,仅仅表名不一样。这在直接使用SQL语句进行查询的环境中处理起来很简单,但如果使用了SQLAlchemy ORM之后,因在model定义时就确定了表名,就需要用其他方法进行表名的变更。

假定数据库中有两张表:user,user_1,下面用一个简单程序展示如何在查询时变更表名。

 使用declarative_base定义的model

from sqlalchemy import create_engine

from sqlalchemy import Table, Column, Integer, String, MetaData

from sqlalchemy.orm import sessionmaker

metadata = MetaData()

from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()



class User(Base):

    __tablename__ = 'users'

    __table_args__ = {

        'mysql_engine': 'InnoDB',

        'mysql_charset': 'utf8'

    }
    id = Column(Integer, primary_key=True)

    name = Column(String(30))

    fullname = Column(String(120))

    password = Column(String(30))



engine = create_engine('mysql://root:@127.0.0.1/test?charset=utf8', echo=True)

Session = sessionmaker(bind=engine)

session = Session()

查询表1

user = session.query(User).filter(User.name=='myname').all()

查询表2

User.__table__.name = 'users_1'

user = session.query(User).filter(User.name=='myname').all()

免责声明:文章转载自《在SQLAlchemy ORM中动态变更表名》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇lib和dll文件的初了解100道linux运维笔试题下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

ORA-10635: Invalid segment or tablespace type

上周星期天在迁移数据时,碰到了ORA-10635: Invalid segment or tablespace type 错误,当时的操作环境如下: 操作系统版本: [oracle@xxxxx scripts]$ more /etc/issue Red Hat Enterprise Linux ES release 4 (Nahant Update 6...

【SQL】日期型函数

1、 SYSTATE 用来返回系统当前时间 SQL> select sysdate from dual; SYSDATE ------------------- 2017-03-03 09:49:25 2、 ADD_MONTHS 语法: ADD_MONTHS(date,integer) 用于从一个日期值增加或减少一些月份 1) 返回系统时间一个月后...

JAVA读取yml配置文件指定key下的所有内容

先引入需要的依赖 <!--读取yml文件--> <dependency> <groupId>org.yaml</groupId> <artifactId>snakeyaml</artifactId>...

Jquery Mobile日期控件mobiscroll

1.日期控件 参考:http://www.cnblogs.com/hxling/archive/2012/12/12/2814207.html http://www.wglong.com/main/artical!details?id=11 <link href="css/mobiscroll.custom-2.5.0.min.css" rel="s...

Java-生成指定长度验证码的一种简单思路

 前言:以前做过的一个项目,刚开的时候始验证码是在前端生成前端验证的,后来觉得不靠谱,另外就是找回密码的功能也需要发送邮件和短信的验证码,所以,验证码就必须在后端生成并且保存到应用会话中才行了!所以,就有了下面的这段简单的代码,这段代码虽然简单,但也是生成验证码的一种思路,在此小记一笔以备后用。 1:如下是生成验证码、测试生成验证码的方法,比较简单,注释也...

win10 安装wsl2 centos

win10 powershell(管理员身份)操作 安装choco(windows的包管理工具类似于brew) Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServiceP...