首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL中的动态列格式设置-以及用于存储格式设置的后端

SQL中的动态列格式设置-以及用于存储格式设置的后端
EN

Stack Overflow用户
提问于 2009-10-01 12:16:58
回答 2查看 409关注 0票数 1

我正在尝试用Python创建一个系统,在这个系统中,用户可以从一组表中选择一些行,这些表将以用户定义的方式格式化。假设表a有一组列,其中一些列包含datetimestamp值。每列的用户定义格式应存储在另一个表中,并在运行时对主查询进行查询和应用。

让我给你举个例子:设置日期列的格式有不同的方法,例如使用

代码语言:javascript
复制
SELECT to_char(column, 'YYYY-MM-DD') FROM table;

在PostgreSQL中。

例如,我希望在运行时从另一个表中动态查询to_char()内置的第二个参数,如果该参数有值,则应用该参数。

从表中读取定义本身并不是那么大的问题,而不是创建将从用户界面接收数据的数据库方案,用户可以从该用户界面选择要应用于不同列的格式化指令。用户应该能够选择要包括在用户查询中的用户的列集,以及用户为每列定义的格式。

我已经考虑了几天了,想用一种优雅而高效的方式来做这件事,但没有成功。让用户在文本字段中输入用户想要的定义,并将其包含在查询中,很可能会引发SQL注入攻击(尽管我可以使用escape()函数),而且对我来说,存储所有可能的组合似乎也不可行。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-10-01 13:34:33

在我看来,stored procedure或sub-select在这里会工作得很好,尽管我还没有测试过它。假设您在users表中为每个用户存储了一个date_format

代码语言:javascript
复制
SELECT to_char((SELECT date_format FROM users WHERE users.id=123), column) FROM table;

您的里程可能会有所不同。

票数 0
EN

Stack Overflow用户

发布于 2009-10-01 13:48:27

将日期提取为Unix时间戳并在Python中格式化:

代码语言:javascript
复制
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中,这样你就可以在格式化时应用用户特定的时区设置,而不必在所有数据库操作中考虑它们。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1503621

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档