我正在尝试用Python创建一个系统,在这个系统中,用户可以从一组表中选择一些行,这些表将以用户定义的方式格式化。假设表a有一组列,其中一些列包含date或timestamp值。每列的用户定义格式应存储在另一个表中,并在运行时对主查询进行查询和应用。
让我给你举个例子:设置日期列的格式有不同的方法,例如使用
SELECT to_char(column, 'YYYY-MM-DD') FROM table;在PostgreSQL中。
例如,我希望在运行时从另一个表中动态查询to_char()内置的第二个参数,如果该参数有值,则应用该参数。
从表中读取定义本身并不是那么大的问题,而不是创建将从用户界面接收数据的数据库方案,用户可以从该用户界面选择要应用于不同列的格式化指令。用户应该能够选择要包括在用户查询中的用户的列集,以及用户为每列定义的格式。
我已经考虑了几天了,想用一种优雅而高效的方式来做这件事,但没有成功。让用户在文本字段中输入用户想要的定义,并将其包含在查询中,很可能会引发SQL注入攻击(尽管我可以使用escape()函数),而且对我来说,存储所有可能的组合似乎也不可行。
发布于 2009-10-01 13:34:33
在我看来,stored procedure或sub-select在这里会工作得很好,尽管我还没有测试过它。假设您在users表中为每个用户存储了一个date_format。
SELECT to_char((SELECT date_format FROM users WHERE users.id=123), column) FROM table;您的里程可能会有所不同。
发布于 2009-10-01 13:48:27
将日期提取为Unix时间戳并在Python中格式化:
SELECT DATE_PART('epoch', TIMESTAMP(my_col)) FROM my_table;
my_date = datetime.datetime.fromtimestamp(row[0]) # Or equivalent for your toolkit我发现这种方法有几个优点: unix时间戳是最节省空间的通用格式(这种方法实际上是语言中立的),因为你查询数据库的语言比底层数据库更丰富,如果你开始想要做更友好的格式,比如“今天”,“昨天”,“上周”,“6月23日”,你会有很多选择。
我不知道你在开发什么类型的应用程序,但如果它是一个web应用程序,它将被多个人使用,我也会考虑将你的数据库值存储在UTC中,这样你就可以在格式化时应用用户特定的时区设置,而不必在所有数据库操作中考虑它们。
https://stackoverflow.com/questions/1503621
复制相似问题