栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何将数据从ASCII(ISO / IEC 8859-1)导入到Rails / PGSQL数据库?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何将数据从ASCII(ISO / IEC 8859-1)导入到Rails / PGSQL数据库?

压缩文件包含许多文件:

  inflating: DATA_SRC.txt   inflating: DATSRCLN.txt   inflating: DERIV_CD.txt   inflating: FD_GROUP.txt   inflating: FOOD_DES.txt   inflating: FOOTNOTE.txt   inflating: LANGDESC.txt   inflating: LANGUAL.txt    inflating: NUT_DATA.txt   inflating: NUTR_DEF.txt   inflating: sr26_doc.pdf   inflating: SRC_CD.txt     inflating: WEIGHT.txt

每种格式都似乎是一种类似于CSV的奇异格式,例如

NUTR_DEF.txt

~287~^~g~^~GALS~^~Galactose~^~2~^~2100~~291~^~g~^~FIBTG~^~Fiber, total dietary~^~1~^~1200~

加上

sr26_doc.pdf
文档。

创建表定义

因此,您需要在这里为数据库创建SQL表定义-每个输入文件都有一个表。您需要此

CREATE TABLE
命令;请参阅PostgreSQL文档。

PDF的第35页应为您提供帮助-“图1. USDA国家营养数据库供标准参考的文件之间的关系”。以下页面描述了文件格式,告诉您每列的含义。您可以

CREATETABLE
根据此描述编写语句。

这是

FOOD_DES.txt
第一个条目(食品说明)的示例。

CREATE TABLE food_des (    "NDB_No"      varchar(5) NOT NULL PRIMARY KEY,    "FdGrp_Cd"    varchar(4) NOT NULL,    "Long_Desc"   varchar(200) NOT NULL,    "Shrt_Desc"   varchar(60) NOT NULL,    "ComName"     varchar(100),    "ManufacName" varchar(65),    "Survey"      varchar(1),    "Ref_desc"    varchar(135),    "Refuse"      smallint,    "SciName"     varchar(65),    "N_Factor"    NUMERIC(4,2),    "Pro_Factor"  NUMERIC(4,2),    "Fat_Factor"  NUMERIC(4,2),    "CHO_Factor"  NUMERIC(4,2));

那是描述的漂亮文字副本。这不是我设计桌子的方式

NUMERIC
为了非整数数值类型的准确性,我使用了任意精度的十进制浮点数类型。如果性能比准确性更重要,则可以
float4
改用。

对于关系,您使用

FOREIGN KEY
约束-
colname coltype REFERENCESothertable(othercol)
足以创建约束。

重要说明 :我用双引号将列名保留为与定义中相同的名称。这意味着您在引用它们时必须始终双引号,例如

SELECt "NDB_No" FROMfood_des;
。如果您不希望这样做,只需取消双引号-或选择其他名称。您不必坚持使用它们笨拙的缩写列名,并且编写代码是很合理的:

CREATE TABLE food_description (    ndb_no   varchar(5) NOT NULL PRIMARY KEY,    foodgroup_pre      varchar(4) NOT NULL,    long_description    varchar(200) NOT NULL,    short_description   varchar(60) NOT NULL,    common_name         varchar(100),    manufacturer_name   varchar(65),

类似地,如果您正在使用Rails,则可以将表定义转换为遵循Rails的约定,尤其是如果您打算随后通过Rails进行数据加载时。

加载数据中

如果这些是合理的,合理的定界文件,则可以使用

psql
命令
copy
或PgAdmin-III的“导入”选项加载每个表。

实际上是CSV,他们刚刚决定使用完全奇怪的定界符并引用char。通过

psql
以下方式导入:

copy food_des FROM 'FOOD_DES.txt' (FORMAT CSV, DELIMITER '^', QUOTE '~');

或与PostgreSQL通讯所使用的任何工具中的等效工具。

结果是一个明智的表:

craig=> select * from food_des limit 2; NDB_No | FdGrp_Cd |         Long_Desc          |        Shrt_Desc         | ComName | ManufacName | Survey | Ref_desc | Refuse | SciName | N_Factor | Pro_Factor | Fat_Factor | CHO_Factor --------+----------+----------------------------+--------------------------+---------+-------------+--------+----------+--------+---------+----------+------------+------------+------------ 01001  | 0100     | Butter, salted  | BUTTER,WITH SALT         |         |  | Y      |          |      0 |         |     6.38 |       4.27 |       8.79 |       3.87 01002  | 0100     | Butter, whipped, with salt | BUTTER,WHIPPED,WITH SALT |         |  | Y      |          |      0 |         |     6.38 |       4.27 |       8.79 |       3.87(2 rows)

同样,如果使用Rails,则可以使用所需的任何Rails CSV库并将其批量加载到模型中。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/421370.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号