小编moo*_*use的帖子

使用Postgresql在Datamapper中像(ilike)一样不区分大小写

我们在Sinatra应用程序中使用Datamapper,并且希望使用不区分大小写,就像Sqlite(开发中的本地)和Postgresql(生产中的Heroku)一样.

我们有这样的陈述

TreeItem.all(:name.like =>"%#{term}%",:unique => true,:limit => 20)
Run Code Online (Sandbox Code Playgroud)

如果term是"BERL",我们从Sqlite和Postgresql后端获得建议"BERLIN".但是,如果term是"Berl",我们只从Sqlite而不是Postgresql获得结果.

我想这与dm-postgres-adapter和dm-sqlite-adapter LIKE在结果SQL查询中输出a这一事实有关.由于Postgresql具有区分大小写,因此LIKE我们得到了这个(对于我们不需要的)行为.

有没有办法像Datamapper一样获得不区分大小写,而不需要使用原始SQL查询到适配器或修补适配器ILIKE而不是LIKE

我当然可以在两者之间使用某些东西,例如:

TreeItem.all(:conditions => ["name LIKE ?","%#{term}%"],:unique => true,:limit => 20)
Run Code Online (Sandbox Code Playgroud)

但是我们将在我们自己的代码中使用Postgresql,而不仅仅是作为适配器的配置.

ruby postgresql datamapper

7
推荐指数
1
解决办法
1598
查看次数

如何用Ruby中的DateTime strptime解析非英语日期?

我正在尝试解析从CMS导出的日期.不幸的是,瑞典语区域设置.月份名称缩写为三个字符,这在5月和10月("maj"与"May","okt"与"Oct")之间有所不同.

我希望使用DateTime.strptime并设置正确的语言环境来解决此问题,如下所示:

require 'locale'
Locale.default = "sv_SE"
require 'date'
DateTime.strptime("10 okt 2009 04:32",'%d %b %Y %H:%M')
Run Code Online (Sandbox Code Playgroud)

但是仍然会解析日期,因为它将使用英文缩写的月份名称:

ArgumentError: invalid date
    from lib/ruby/1.9.1/date.rb:1691:in `new_by_frags'
    from lib/ruby/1.9.1/date.rb:1716:in `strptime'
    from (irb):9
    from bin/irb:16:in `<main>'
Run Code Online (Sandbox Code Playgroud)

问题4339399涉及同一主题,并链接到解决此问题的复杂解决方案.

有更优雅的解决方案吗?这甚至被认为是Ruby中的一个错误?

ruby localization

6
推荐指数
1
解决办法
1341
查看次数

是否有任何Python库支持将结构数组写入Parquet文件?

我想将其中某些列是字符串数组或结构数组(通常是键值对)的数据写入Parquet文件中,以便在AWS Athena中使用。

找到两个Python库(Arrow和fastparquet)以支持对Parquet文件的写入之后,我努力尝试了一段时间以获取结构数组。

编写Parquet文件的问题的最高答案列出了这两个库(并提到缺乏对嵌套数据的支持)。

那么有没有办法从Python将嵌套数据写入Parquet文件?


我尝试使用Arrow进行以下操作以存储键/值。

import pyarrow as pa
import pyarrow.parquet as pq

countries = []
populations = []

countries.append('Sweden')
populations.append([{'city': 'Stockholm', 'population': 1515017}, {'city': 'Gothenburg', 'population': 590580}])
countries.append('Norway')
populations.append([{'city': 'Oslo', 'population': 958378}, {'city': 'Bergen', 'population': 254235}])


ty = pa.struct([pa.field('city', pa.string()),
                pa.field('population', pa.int32())
])

fields = [
    pa.field('country', pa.string()),
    pa.field('populations', pa.list_(ty)),
]
sch1 = pa.schema(fields)

data = [
    pa.array(countries),
    pa.array(populations, type=pa.list_(ty))
]
batch = pa.RecordBatch.from_arrays(data, ['f0', 'f1'])
table = pa.Table.from_batches([batch], sch1)
writer = pq.ParquetWriter('cities.parquet', sch1)
writer.write_table(table)
writer.close() …
Run Code Online (Sandbox Code Playgroud)

python parquet fastparquet pyarrow

6
推荐指数
1
解决办法
1317
查看次数