Используя Python, я пытаюсь прочитать таблицу из SQL Server, а затем вставить данные в таблицу в Access.Лучший способ, который я нашел для этого, - использование фрейма данных pandas.Я написал программу, которая читает таблицу SQL Server в фрейм данных примерно так:
dataframe = pandas.read_sql(selectSql, srcConn)
И она прекрасно работает на столе размером ~ 209 МБ.Когда я пытаюсь сделать это на столе размером ~ 1116 МБ, возникает исключение без описания.Я предполагаю, что это связано с размером таблицы, в которой он читается (было бы хорошо, если бы он сказал это).Я знаю, что Access может вместить только 2 ГБ, но в нем достаточно места, и он даже не доходит до той части, где пишет в Access, до выдачи ошибки.
Есть ли способ исправить это длябольшие столы?Есть ли лучший способ, которым я должен копировать таблицы из SQL Server 2008 R2 в Access 2016 с помощью Python?У меня 16 ГБ ОЗУ на Win10 64-bit, так что проблем не должно быть.Я пробовал 32-битный Python 3.7 и 64-битный Python 3.6 безрезультатно.Сначала я попробовал SSIS, но он вылетал из моей всей Visual Studio всякий раз, когда я пытался открыть пакет с подключением к Access.
ОБНОВЛЕНИЕ:
Я следовал совету Горда ниже итеперь мой код выглядит так:
access_cnxn_str = (
r'DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};'
r'DBQ=' + access_db + ';'
)
sqls_cnxn_str = (
r'DRIVER=ODBC Driver 13 for SQL Server;'
r'SERVER=' + sqls_server + ';'
r'DATABASE=' + sqls_db + ';'
r'UID=' + sqls_username + ';'
r'PWD=' + sqls_password + ';'
)
Это соединение работает само по себе:
sqls_cnxn = pyodbc.connect(sqls_cnxn_str)
И это соединение работает само по себе:
pyodbc.pooling = False
access_cnxn = pyodbc.connect(access_cnxn_str, autocommit = True)
Но этовыдает ошибку:
access_cnxn.execute(f"SELECT * INTO {access_table} FROM [ODBC;{sqls_cnxn_str}].{sqls_table}")
выдается ошибка:
Message = ('HY000', '[HY000] [Microsoft] [ODBC Microsoft Access Driver] ODBC - соединение«ODBC-драйвер 13 для SQL ServerSERVERNAME» не удалось. (-2001) (SQLExecDirectW) ")
Source = C: \ Users \ bruescm \ source \ repos \ DB_Test \ DB_Test \ SyncAllTests.py
StackTrace: File"C: \ Users \ bruescm \ source \ repos \ DB_Test \ DB_Test \ SyncAllTests.py ", строка 57, в sync_table dest_cnxn.execute (f" SELECT * INTO {access_table} FROM [ODBC; {sqls_cnxn_str}]. {Sqls_table} ".) Файл "C: \ Users \ bruescm \ source \ repos \ DB_Test \ DB_Test \ SyncAllTests.py", строка 121, в главной таблице sync_table ('', sqls_table,get_access_cnxn (), access_table) Файл "C: \ Users \ bruescm \ source \ repos \ DB_Test \ DB_Test \ SyncAllTests.py", строка 124, в main ()
SERVERNAME в ошибке указываетсяимя сервера, на котором находится SQL Server.Не уверен, почему это заклинило его с именем драйвера в ошибке.
Есть идеи?
ОБНОВЛЕНИЕ 2:
Оказывается, мой доступ32-битныйЭто по-прежнему не объясняет, почему он не подключается, поскольку я изначально использовал 32-битную версию Python 3.7.
Спасибо.