span8
span4
我正在使用一个自定义转换器,其中一个输入参数基于PostgreSQL表中的列。最初我想让用户自由选择数据库连接、模式和表名……在试用了POSTGRES reader之后,我意识到这个表名似乎是不可能更改的——我可以接受这个事实。
我仍然在为要从数据库表列生成的选择列表而烦恼。
在FME中,是否有可能在运行工作区之前检索数据库表的列名?如果可以用Python来实现,那对我来说就很好了,但目前我还不知道该怎么做。精神病2不属于Python的FME (afaik)和使用FMEs自己的模块,我不知道如何做到这一点。
我必须使用吗fme.宏值或者它可以用fmeobjects.getAllAttributeNames吗?如何在脚本中引用PostgreSQL表?
拉里已经告诉过我们如何使用psycopg2。我将解释如何获取表的列名。
使用以下查询获取所有列名。
从information_schema中选择column_name。columns where table_name = 'Your_table_name'
例子:
请参阅本操作指南Python Postgresql数据库访问
连接= psycopg2。connect(user="postgres", password="your_pass", host="your_host", port="5432", database="your Database") PostgreSQL_select_Query = """select column_name from information_schema.columns where table_name = 'your_table_name' """ cursor = connection.cursor() cursor.execute(PostgreSQL_select_Query) records = cursor.fetchall() print ("Displaying column name from table ") for column in records: print (column)
@larry的回答很好。
我只是补充,有一些非常有用的提示,如何配置FME与自定义Python解释器(特别是有用的第三方模块,如psycopg2和arcpy)在这里找到:
https://knowledge.亚搏在线safe.com/questions/53449/running-python-in-fme.html
如果你决定走这条路,那就值得一读。
我不知道您将如何处理这个问题,但这里有一种方法可以在脚本化的python参数中使用unsing python获取表的列。
要安装psycop2,请首先转到派皮然后加载符合FME/python版本的whl文件。
打开whl文件7拉链并将psycopg2复制到FME installation python\Lib文件夹(例如:C:\ apps\FME16.1.2-32-b16673\fmepython27\Lib)。
附加的工作区(get cols.fmw)有一个Python脚本参数,返回一个字符串,该字符串是用逗号分隔的列名列表。
Python代码:
import psycopg2 colnames=[]conn=psycopg2.connect(host=“%s”%FME_MacroValues['host',port=FME_MacroValues['port',dbname=“%s”%FME_MacroValues['DATABASE',user=“%s”%FME_MacroValues['user',password=“%s”%FME_MacroValues['password'])cur=conn.cur()cur.execute(“从信息模式中选择列名称,数据类型。表名称所在的列='%s';'%FME_MacroValues['TABLE_NAME'])row=cur.fetchone()while row!=无:colnames.append(行[0])row=cur.fetchone()返回“,”.join(colnames)
©2019安全亚搏在线软件公司法律