我想创建一个函数,给定表的名称,返回具有该表名的模型.例如:
class Model(Base):
__tablename__ = 'table'
...a bunch of Columns
def getModelFromTableName(tablename):
...something magical
Run Code Online (Sandbox Code Playgroud)
所以getModelFromTableName('table')应该返回Model类.
我的目标是在我正在制作的简单表单生成器中使用该函数,因为FormAlchemy不能与python3.2一起工作,我希望它能很好地处理外键.
任何人都可以给我任何关于如何让getModelFromTableName工作的指针吗?
这是我的一个想法(可能完全错误,我之前没有使用过meta类)
如果我要使我的Model类继承自Base以及其他一些类(TableReg)并具有TableReg商店Model的类meta,该怎么办?tablename在某些全局字典或Singleton中.
我意识到这可能是完全关闭的,因为Base的元类做了一些非常重要且非常好的东西,我不想打破,但我认为必须有一种方法让我在元类中附加一些构造函数代码我的模特 或者我不明白.
我正在尝试使用SQLAlchemy ORM实现动态过滤.
我正在浏览StackOverflow并发现了非常类似的问题:SQLALchemy dynamic filter_by
它对我有用,但还不够.
所以,这是一些代码示例,我正在尝试写:
# engine - MySQL engine
session_maker = sessionmaker(bind=engine)
session = session_maker()
# my custom model
model = User
def get_query(session, filters):
if type(filters) == tuple:
query = session.query(model).filter(*filters)
elif type(filters) == dict:
query = session.query(model).filter(**filters)
return query
Run Code Online (Sandbox Code Playgroud)
然后我试图用非常相似的东西重用它:
filters = (User.name == 'Johny')
get_query(s, filters) # it works just fine
filters = {'name': 'Johny'}
get_query(s, filters)
Run Code Online (Sandbox Code Playgroud)
第二次运行后,有一些问题:
TypeError: filter() got an unexpected keyword argument 'name'
Run Code Online (Sandbox Code Playgroud)
当我试图改变我filters的时候:
filters = {User.name: 'Johny'} …Run Code Online (Sandbox Code Playgroud) 我刚开始使用SQLAlchemy.我决定使用它,因为我在sqlite查询中使用了很多字符串表达式.
所以,这是我的问题.我有一张桌子,里面有许多设备,每个设备都有维护等级的日期.关键是用户可以选择他想要在屏幕上看到的维护级别.因此,我应该为他选择的每个维护级别组合"调整"我的SQLAlchemmy.
例如,在原始SQLite中.
SELECT*WHERE(设备IN [])和m_level1 = DATE AND m_level2 = DATE ....)
因此,每个if条件都可以有许多组合,它取决于检查哪个复选框.正如我所提到的,在原始SQL中我使用了很多字符串来达到我的目标.但我想使用SQLAlchemy改进代码.
对不起,我现在没有代码!谢谢你们 !
我陷入了这个数据库搜索问题:我有一个带有不同复选框的 PyQt5 小部件。它们中的每一个都代表我数据库中的一列。例如,“worker_name”和“department”。复选框放置在行编辑附近,因此用户可以在该行编辑中插入一些文本,然后单击复选框和“查找”按钮。
比方说,用户在 lineEdit 中插入“John”,然后按“worker_name”复选框并通过以下方式获取该工人的所有文档
session.query(Doc).filter_by('worker_name'=text_from_lineEdit)
Run Code Online (Sandbox Code Playgroud)
如果用户在两个行编辑中插入文本并按下两个复选框(“worker_name”和“department”),查询将如下所示:
session.query(Doc).filter_by('worker_name'=text_from_lineEdit, 'department'=text_from_lineEdit_2)
Run Code Online (Sandbox Code Playgroud)
但是,如果我有很多复选框(与数据库表中的列一样多)并且我不知道其中哪些会被按下,哪些不会被按下,该怎么办?在这种情况下我应该如何形成查询?我的意思是我将有“wrk_name”、“department”和“date”,用户只能通过“worker_name”或“worker_name”+“date”或所有复选框进行搜索。
有没有什么方法可以根据给出的参数以及不将它们包含在“filter_by”/“filter 中或只是忽略来动态地形成数据库查询。
请分享您对此类功能的可能实现的想法。谢谢您的时间。
sqlalchemy ×4
python ×3
dynamic ×2
filter ×1
filtering ×1
foreign-keys ×1
pyqt5 ×1
python-3.x ×1
sqlite ×1