おかげvarchar型することができ、これは、更新のために少し長いです、ここで私は答えを組み合わせた方法です。
dbf_list = [{'Warngentyp': '', 'Lon': '-81.67170', 'Zwatch_war': '0', 'State':...
最高のデシベル型宣言をテストするために、列ごとに1000の値を返す次に機能:このような{'column_name':['list', 'of', 'sample', 'values'], 'col2':['1','2','3','4'...
:
def sample_fields(dicts_, number=1000): #dicts_ would be dbf_list from above
sample = dict([[item, []] for item in dicts_[1]])
for dict_ in dicts_[:number]:
for col_ in dict_:
sample[col_].append(dict_[col_])
return sample
私はDBFファイルから生成され、このようなdictsのリストを始めていますその後
あなたが不明とヤコブのアプローチを組み合わせる:varchar型が良いデフォルトで、山車とint型は、他のすべてのために基本的には十分にあり、all
ははっきりと高速です:
def find_typedefs(sample_dict): #arg is output of previous function
defs_ = {}
for key in sample_dict:
defs_[key] = 'varchar(255)'
try:
if all([int(value) for value in sample_dict[key]]):
defs_[key] = 'int'
except:
try:
if all([float(value) for value in sample_dict[key]]):
defs_[key] = 'float'
except:
continue
return defs_
返されたdictをcreate table
ステートメントに書式設定し、元の大きなリストの値を反復処理してデータベースに送ります。それは素晴らしい、私は今、中間のsqliteのステップをスキップしている、もう一度ありがとう。
John Machinのアップデート:私はPostGISと一緒に配布されているshp2pgsqlライブラリを使用しています。それはthis oneのようなソースと、以下のようなスキーマを作成します。
Column | Type |
------------+-----------------------+-
gid | integer |
st_fips | character varying(7) |
sfips | character varying(5) |
county_fip | character varying(12) |
cfips | character varying(6) |
pl_fips | character varying(7) |
id | character varying(7) |
elevation | character varying(11) |
pop_1990 | integer |
population | character varying(12) |
name | character varying(32) |
st | character varying(12) |
state | character varying(16) |
warngenlev | character varying(13) |
warngentyp | character varying(13) |
watch_warn | character varying(14) |
zwatch_war | bigint |
prog_disc | bigint |
zprog_disc | bigint |
comboflag | bigint |
land_water | character varying(13) |
recnum | integer |
lon | numeric |
lat | numeric |
the_geom | geometry |
ものが間違ってなければならないことがあります - FIPSは、連邦情報処理規格であり、そしてそれは0から100,000のようなものの間の整数でなければなりません。人口、標高などたぶん私はpostgresの特定の質問の多くを持っている、私は少量のデータを失うこと、またはエラーや何かのためにテーブルにプッシュする気にしないで、人口のフィールドを言うタイプを変更しようとしている。 dbfの型チェックはどれくらい厳密ですか?たとえば、shp2pgsqlあたりの人口はvarchar(12)です。いくつかの小さな人口フィールドに「2,445 Est」のようなものが含まれている可能性はありますか?私はすべて([「リスト」内のすべての値をチェックすると一方
Column | Type |
------------+------------------------+-
warngentyp | character varying(255) |
lon | double precision |
zwatch_war | character varying(255) |
state | character varying(255) |
recnum | character varying(255) |
pop_1990 | integer |
land_water | character varying(255) |
elevation | integer |
prog_disc | integer |
comboflag | character varying(255) |
sfips | integer |
zprog_disc | integer |
pl_fips | integer |
county_fip | integer |
population | integer |
watch_warn | integer |
name | character varying(255) |
st | character varying(255) |
lat | double precision |
st_fips | integer |
cfips | integer |
id | integer |
warngenlev | integer |
、:私は最初の1000件のレコードを、この質問に記載されたアプローチを取る場合、私はこのようなスキーマを取得します'of'、 'everything' ...])、最初のスキーマに近いスキーマが得られます。
私はdbview
と呼ばれる古いパッケージを使用してdbfファイルをパイプ処理していますが、私はちょっとしたデータ損失を許容できます。これらのスクリプトには、私はフォーマットのネイティブ機能をマップしようとしていません。私はshp2pgsqlがその点で低懸念の果物を選んだと仮定しました。とにかく私はdbfファイルで作業していない可能性があり、とにかく最良のタイプを見つける必要がある他のケースがありますが、dbviewまたは他のパッケージのいずれかの提案は歓迎です。私はpostgresqlに関する質問をして、そのレベルで解決策が見つかるかどうかを調べるつもりです。
+1、私はあなたのモジュールを試してみたいと思っています。私は実際に何かのために設計されたライブラリを使用しているかもしれない、私はあなたのコメントごとに自己回答を拡大し、あなたの投稿に追加したい場合はここにチェックします。 – unmounted
後でお送りします。 –
これは私が見つけることができたその種の最高のデータセットです。これまでのテストフィールドや、失敗した挿入に使用しているエラーログにはゼロがありません。私はデータを掘り下げており、基本的にはコロラド州とカナダとニュージャージー州の88行の不整列行があり、名前の算術演算子のようなものがあります。私は.2%のエラー率に達しています。 40k +のうち88がOKで、カナダはとにかく除外されるべきです。 "クレジットアイランド、アイオワ"は持っているといいですね。私の目標は、輸入クラスを自動化することでした。私はそこに着いています。私はあなたのモジュールを勉強して使用しています.BTW、たくさんのものを手に入れます... – unmounted