我使用SqlAlchemy查询Oracle数据库并将结果存储在csv文件中。
我想为要写入的日期指定一种全局格式,如下所示:
'DD-MM-YYYY HH24:MI:SS'.
我已经在系统上设置了NLS_DATE_FORMAT。
例如:
datetime.datetime(2016, 12, 22, 13, 12, 35)
最终将:
2004-12-22 13:12:35
我想:
22-12-2004 13:12:35
当我处理数百个表时,我无法“手动”应用“strftime”。
也许我的目的和你一样。
我只想打印(行)已格式化日期时间,而不是数据时间。日期时间(y、m、d…事物。
我尝试了几种方法(关于处理datetime):
date\u format//与sql方言相关的
从设备中选择*,date\u format(上次登录,“%m-%d-%Y”)
//函数。date\u格式,func。至\u char
将RowProxy转换为普通dict//不同的访问样式
自定义JSON。编码器//仅用于json字符串化
https://stackoverflow.com/a/22238613/4896468
- 继承RowProxy//我认为入侵性较小
只需在这里解释继承方式:
原始行
>>> type(row)
<class 'aiomysql.sa.result.RowProxy'>
>>> row
(4982, '203233D81914', False, datetime.datetime(2021, 6, 28, 19, 30, 6))
>>> row.last_login
datetime.datetime(2021, 6, 28, 19, 30, 6)
我那一排
>>> my_row = my_proxy(row)
>>> my_row
(4982, '203233D81914', False, '2021-06-28 19:30:06')
>>> my_row.last_login
'2021-06-28 19:30:06'
继承RowProxy并重写(根据需要任意重写)
__repr__
(用于打印)
__getattr__
(用于. xxx文件访问)
from datetime import datetime
class my_proxy(proxy_type):
# refer orig RowProxy implement
def __init__(self, row):
self._result_proxy = row._result_proxy
self._row = row._row
self._processors = row._processors
self._keymap = row._keymap
# for print
def __repr__(self):
# return ' xx:'+ repr(self.as_tuple())
return repr(tuple(v.strftime('%F %T') if type(v)==datetime else v for v in self.as_tuple()))
# for field access
def __getattr__(self, name):
try:
# return self[name]
v = self[name]
return v.strftime('%F %T') if type(v)==datetime else v
except KeyError as e:
raise AttributeError(e.args[0])
proxy_type=类型(行)
这是
aiomysql.sa.result.RowProxy
代码基于
aiomysql 0.0.22
- SQLAlchemy 1.4.31
尤其是
\uuu init\uuuu
函数:
github:aimysql/sa/result。py#L22
不同的版本可能会有所不同。
我找到了解决这个问题的方法。
是的,可以将日期转换为具有适当格式的字符。但是,在我的例子中,SQL语句是由另一个模块提供的,我需要处理100多个表。
因此,我决定使用由SqlAlchemy通过执行()方法返回的ResultProxy对象中包含的数据。
我一次按1000行的块(块是经典类型列表)获取一个表。但这些行是一种元组(更准确地说是SqlAlchemy RowProxy对象),它无法修改。
因此,我对它们进行了处理,将它们按顺序排列,并更新组块列表。
使用“集合”很重要。OrderedDict’因为它保持字段的顺序。对于经典dic,则字段标签和值可能不匹配。
现在,我的区块可以进行各种处理(将日期更改为具有适当格式的字符串,在VARCHAR字符串中替换char,等等……)。字典结构非常适合这一点。
请注意,在写入之前,必须回溯区块列表中的OrderedDic行。
result_proxy = connection.execute(request)
while True:
chunk = self.result_proxy.fetchmany(1000)
if not chunk:
break
# treatments comes here after :
# 1- transform into a dic in order to be able to modify
for i, row in enumerate(chunk):
chunk[i] = OrderedDict(row)
# 2- clean dates
for i, row_odic in enumerate(chunk):
for item in row_odic:
if(type(row_odic[item]) is datetime.datetime):
row_odic[item] = str(row_odic[item].strftime("%d/%m/%Y"))
chunk[i] = row_odic
# Other data treatment
# cast back for it to look like a classical result :
for c, row_odic in enumerate(chunk):
self.chunk[c] = row_odic.values()
# finally write row_odic.values in the csv file
我不确定这是否是最有效的解决方案,但性能看起来不错。我有一个版本的这种处理(相同数量的数据),但使用Pandas库,执行起来有点长。
我正在使用ColdFusion和SpreadsheetNew、SpreadsheetAddRow、SpreadsheetFormatRow等函数创建Excel文件。根据我在这里阅读的文档,它们是颜色和fgColor的属性。我有点困惑两者之间的区别。一个是文本颜色,另一个是背景颜色吗?我一直在使用fgColor来设置行的背景颜色。 我的主要问题是,根据文档,我可以在颜色类作为我的颜色。然而,我真的需
通过 Matplotlib axes 对象提供的 grid() 方法可以开启或者关闭画布中的网格(即是否显示网格)以及网格的主/次刻度。除此之外,grid() 函数还可以设置网格的颜色、线型以及线宽等属性。 grid() 的函数使用格式如下: grid(color='b', ls = '-.', lw = 0.25) 参数含义如下: color:表示网格线的颜色; ls:表示网格线的样式; lw:
问题内容: 我正在创建一个HTML表,将在Excel中作为电子表格打开。我可以使用哪种HTML标记或CSS样式“讲述” Excel以将单元格的内容显示为文本? 问题答案: 您可以将格式应用于数字,文本,日期等的单元格。 请参阅我以前关于此的答案:HTML toExcel:如何告诉Excel将列视为数字? (已调整的代码段) 如果将CSS类添加到页面: 并在您的TD上拍那些课,行得通吗?
編輯格式的設計,將焦點放在「簡潔易用」與「易讀性」。 GitBook 使用 Markdown 這種輕量級標記語法作為編輯格式的設計基礎。 在包含實際內容的檔案之外,GitBook 添加了一些額外的參照檔: README:一本書的介紹文字。 SUMMARY:定義章節的架構與順序。 LANGS:多種翻譯版本的設定。 GLOSSARY:詞彙表與定義描述。 除了內容檔案外,一本書至少需要添加 README
缩进 小技巧 缩进两个空格,没有制表符。 在代码块之间请使用空行以提升可读性。缩进为两个空格。无论你做什么,请不要使用制表符。对于已有文件,保持已有的缩进格式。 行的长度和长字符串 小技巧 行的最大长度为80个字符。 如果你必须写长度超过80个字符的字符串,如果可能的话,尽量使用here document或者嵌入的换行符。长度超过80个字符的文字串且不能被合理地分割,这是正常的。但强烈建议找到一个
本文档是一个正在进展的工作,在具体实现过程中将会有所改变。详细信息请查看 现状 页面。 介绍 JSON API 是数据交互规范,用以定义客户端如何获取与修改资源,以及服务器如何响应对应请求。 JSON API设计用来最小化请求的数量,以及客户端与服务器间传输的数据量。在高效实现的同时,无需牺牲可读性、灵活性和可发现性。 JSON API需要使用JSON API媒体类型(application/vn
我们可以看到格式化就是通过格式字符串得到特定格式: format!("{}", foo) -> "3735928559" format!("0x{:X}", foo) -> "0xDEADBEEF" format!("0o{:o}", foo) -> "0o33653337357" 根据使用的参数类型,同样的变量(foo)能够格式化成不同的形式:X, o 和未指定形式。 这个格式化的功能是通过 t
我的FXML中有一个DatePicker,我需要Date将其插入我的SQL数据库。我想格式化我的Date,但它不起作用。 这就是我得到的错误。 我还是个初学者。在过去的3到4个月里,我一直使用Java。我正在尽力提高。