1

pyodbc を使用して、.mbd (アクセス) ファイル内の大きなデータベースをデータマイニングしています。

複数の既存のテーブルから関連情報を取得して新しいテーブルを作成したい (ツールにフィードするため)。

データを転送するために必要なことはすべて知っていると思います。列名とデータ型を指定してテーブルを作成する方法も知っていますが、既存の各列のデータ型 (INTEGER、VARCHAR など) を取得するのに問題があります。テーブル。互換性のある新しい列を作成するには、これらの型が必要です。

私がインターネットで見つけたもの (これこれなど) は無効なコマンドのトラブルに巻き込まれているので、これはプラットフォーム固有の問題だと思います。繰り返しになりますが、私はデータベースに関してかなりグリーンです。

これらのフィールドの型を取得する方法を知っている人はいますか?

4

2 に答える 2

8

これらの記事が役に立たないのは、それらが SQL Server のためのものだからです。SQL Server には、クエリを実行して列データを取得できるシステム テーブルがありますが、MS Access にはありません。MS Access では、オブジェクト名のみを照会できます。

ただし、ODBC は、 ODBC.SQLColumns 関数を介した接続によるスキーマの取得をサポートしています。

この回答によると、 PyODBCはカーソルメソッドを介してこれを公開します

# columns in table x
for row in cursor.columns(table='x'):
    print row.column_name 

マークがコメントで指摘したように、おそらくrow.data_typeも必要です。彼が提供したリンクには、それが提供するすべての列が含まれています

  1. table_cat
  2. table_scheme
  3. テーブル名
  4. column_name
  5. データ・タイプ
  6. タイプ名
  7. column_size
  8. buffer_length
  9. decimal_digits
  10. num_prec_radix
  11. null 許容
  12. 備考
  13. column_def
  14. sql_data_type
  15. sql_datetime_sub
  16. char_octet_length
  17. ordinal_position
  18. is_nullable: SQL_NULLABLE、SQL_NO_NULLS、SQL_NULLS_UNKNOWN のいずれか。
于 2010-12-27T15:41:24.627 に答える
2

私は pyodbc に詳しくありませんが、過去に VBA でこれを行ったことがあります。

あなたが言及した2つのリンクは、Access用ではなく、SQL Server用です。Access テーブルの各フィールドのデータ型を調べるには、DAO または ADOX を使用できます。

これは、Excel 2010 を使用した VBA で、Access データベース (2000 mdb 形式) に接続し、テーブル、フィールド、およびそれらのデータ型を一覧表示する例です (たとえば、「4」は dbLong を意味する列挙型として)。出力にはシステム テーブルが表示され、下部にはユーザーが作成したテーブルが表示されます。ADOX で同様のことを行う方法については、インターネットで簡単に例を見つけることができます。これが役立つことを願っています。

Private Sub TableDefDao()
    Dim db As DAO.Database
    Set db = DAO.OpenDatabase("C:\Database.mdb")

    Dim t As DAO.TableDef
    Dim f As DAO.Field
    For Each t In db.TableDefs
        Debug.Print t.Name
        For Each f In t.Fields
            Debug.Print vbTab & f.Name & vbTab & f.Type
        Next
    Next
End Sub
于 2010-12-27T15:36:38.687 に答える