Как получить типы данных конкретных полей базы данных Access, используя pyodbc? - PullRequest
0 голосов
/ 27 декабря 2010

Я использую pyodbc для сбора данных большой базы данных в файле .mbd (доступ).

Я хочу создать новую таблицу, получающую соответствующую информацию из нескольких существующих таблиц (чтобы затем передать ее винструмент).

Я думаю, я знаю все, что мне нужно для передачи данных, и я знаю, как создать таблицу с заданными именами столбцов и типами данных, но У меня проблемы с получением типов данных (INTEGER, VARCHAR и т. Д.) Соответствующих столбцов в существующих таблицах. Мне нужны эти типы для совместимого создания новых столбцов.

Что я нашел в Интернете (например, this и this ) приводит меня к проблемам с недопустимыми командами, так что я думаю, что это проблема для конкретной платформы.Опять же, я довольно зеленый в базах данных.

Кто-нибудь знает, как получить типы этих полей?

Ответы [ 2 ]

5 голосов
/ 27 декабря 2010

Причина, по которой эти статьи вам не помогают, заключается в том, что они предназначены для 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_schem
  3. table_name
  4. column_name
  5. тип_данный
  6. type_name
  7. COLUMN_SIZE
  8. buffer_length
  9. decimal_digits
  10. NUM_PREC_RADIX
  11. обнуляемым
  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.
2 голосов
/ 27 декабря 2010

Я не знаком с pyodbc, но я делал это в VBA в прошлом.

2 ссылки, которые вы упомянули, предназначены для SQL Server, а не для Access.Чтобы выяснить тип данных каждого поля в таблице Access, вы можете использовать DAO или ADOX.

Вот пример, который я сделал, в VBA с Excel 2010, где я подключаюсь к базе данных Access (2000 МБД).формат) и перечислите таблицы, поля и их типы данных (как перечисление, например, «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
...