如何在python sqlalchemy中为select()创建公共模块?

如何在python sqlalchemy中为select()创建公共模块?,python,sql,flask,sqlalchemy,flask-sqlalchemy,Python,Sql,Flask,Sqlalchemy,Flask Sqlalchemy,我有3个来自SQLAlchemy的模型类用于我的表Table1 Table2 Table3 " " 我希望包装器连接能够处理所有3个具有不同列的不同表。基本上,使其尽可能通用化,以处理与通过SQLAlchemy ORM或核心库从表1中选择column相关的任何条件,其中column=value子句 我面临的问题就在这方面。 'q=query.filter\u bycolumn=value' 其中,我尝试从函数属性t1.name1传递列信息 ct.wrapper\u connectiont1,t1

我有3个来自SQLAlchemy的模型类用于我的表Table1 Table2 Table3

"

"

我希望包装器连接能够处理所有3个具有不同列的不同表。基本上,使其尽可能通用化,以处理与通过SQLAlchemy ORM或核心库从表1中选择column相关的任何条件,其中column=value子句

我面临的问题就在这方面。 'q=query.filter\u bycolumn=value'

其中,我尝试从函数属性t1.name1传递列信息

ct.wrapper\u connectiont1,t1.name1,表1\u值\u信息

我面临的错误:

回溯最近一次呼叫上次: 文件C:\Users\AppData\Local\Programs\Python\37\lib\site packages\sqlalchemy\orm\base.py,第406行,在实体描述符中 返回getattrentity,键

AttributeError:类型对象“Table1”没有属性“column”


问题中的代码需要三个更改:

在wrapper\u连接方法中,使用Query.filter而不是Query.filter\u by,因为它将直接接受列对象 在声明模型类之前,不要调用Base.metadata.create_all t1=Table1创建Table1类的一个新实例—一行。您希望查询表,因此直接使用模型类。
问题中的代码需要三个更改:

在wrapper\u连接方法中,使用Query.filter而不是Query.filter\u by,因为它将直接接受列对象 在声明模型类之前,不要调用Base.metadata.create_all t1=Table1创建Table1类的一个新实例—一行。您希望查询表,因此直接使用模型类。
非常感谢你,它成功了。在相同的上下文中讨论,这是否也适用于更新和删除包装器模块?目前,我必须为多个列提供多个函数,其中self.tablename.c.name是一个python对象,它总是在变化。”def delete_columnself,session,column_value:stmt=self.tablename.delete.whereself.tablename.c.name==column_value session.executestmt session.commit“通过反射数据库对象定义的表:'self.tablename=Tabletable,metadata,autoload=True,autoload_with=engine”非常感谢您的帮助。在相同的上下文中讨论,这是否也适用于更新和删除包装器模块?目前,我必须为多个列提供多个函数,其中self.tablename.c.name是一个python对象,它总是在变化。”def delete_columnself,session,column_value:stmt=self.tablename.delete.whereself.tablename.c.name==column_value session.executestmt session.commit“通过反射数据库对象定义的表:'self.tablename=Tabletable,metadata,autoload=True,autoload_with=engine”
from sqlalchemy import create_engine , text , select, MetaData, Table  ,func , Column , String , Integer
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base
import sqlalchemy
from settings import DATABASE_URI
engine=create_engine(DATABASE_URI)
Base = declarative_base()
Base.metadata.create_all(engine)
Session = sessionmaker(bind=engine)
metadata = MetaData(bind=None)
session = Session()

class Table1(Base):
    __tablename__ = 'table1'
    id = Column(u'id', Integer(), primary_key=True)
    name1 = Column(u'name1', String(50))

class Table2(Base):
    __tablename__ = 'table2'
    id = Column(u'id', Integer(), primary_key=True)
    name2 = Column(u'name2', String(50))

class Table3(Base):
    __tablename__ = 'table3'
    id = Column(u'id', Integer(), primary_key=True)
    name3 = Column(u'name3', String(50))


class connectionTest():
    def wrapper_connection(self,table,column,value):
        #SELECT column FROM table1 WHERE column = value
        query = session.query(table)
        q = query.filter_by(column = value)
        session.execute(q)


def main():
    ct = connectionTest()
    t1 = Table1()
    t2 = Table2()
    t3 = Table3()
    ct.wrapper_connection(t1,t1.name1, "Table1_Value_Information")
    ct.wrapper_connection(t2,t2.name2, "Table2_Value_Information")
    ct.wrapper_connection(t3,t3.name3, "Table3_Value_Information")

if __name__ == '__main__':
    main()
class connectionTest:
    def wrapper_connection(self, table, column, value):
        # SELECT column FROM table1 WHERE column = value
        query = session.query(table)
        # We have the column object, so use filter
        # instead of filter_by
        q = query.filter(column == value)
        session.execute(q)


# Create the tables after the model classes have been declared.
Base.metadata.create_all(engine)
Session = sessionmaker(bind=engine)
session = Session()


def main():
    ct = connectionTest()
    # Use the model classes directly.
    ct.wrapper_connection(Table1, Table1.name1, "Table1_Value_Information")
    ct.wrapper_connection(Table2, Table2.name2, "Table2_Value_Information")
    ct.wrapper_connection(Table3, Table3.name3, "Table3_Value_Information")