Python'dan bir MS Access veritabanı oluşturmaya çalışıyorum ve bir panda veri dosyasından doğrudan bir tablo oluşturmanın mümkün olup olmadığını merak ediyorum. Veritabanını bir SQLite veritabanına veya başka bir veritabanı formatı için sqlalchemy motorunu kullanarak (ama maalesef Access maalesef) başarılı bir şekilde yazmak için pandalar dataframe.to_sql()
işlevini kullanabileceğimi biliyorum, ancak tüm parçaları parçalayamıyorum. İşte test ettiğimiz kod snippet'ine:Python MS Access Veritabanı Tablosu Oluşturma Pandalar Dataframe Kullanma SQLAlchemy
import pandas as pd
import sqlalchemy
import pypyodbc # Used to actually create the .mdb file
import pyodbc
# Connection function to use for sqlalchemy
def Connection():
MDB = 'C:\\database.mdb'
DRV = '{Microsoft Access Driver (*.mdb)}'
connection_string = 'Driver={Microsoft Access Driver (*.mdb)};DBQ=%s' % MDB
return pyodbc.connect('DRIVER={};DBQ={}'.format(DRV,MDB))
# Try to connect to the database
try:
Conn = Connection()
# If it fails because its not been created yet, create it and connect to it
except:
pypyodbc.win_create_mdb(MDB)
Conn = Connection()
# Create the sqlalchemy engine using the pyodbc connection
Engine = sqlalchemy.create_engine('mysql+pyodbc://', creator=Connection)
# Some dataframe
data = {'Values' : [1., 2., 3., 4.],
'FruitsAndPets' : ["Apples", "Oranges", "Puppies", "Ducks"]}
df = pd.DataFrame(data)
# Try to send it to the access database (and fail)
df.to_sql('FruitsAndPets', Engine, index = False)
Ben ne yapmaya çalışıyorum kullanıyorum güncel paketleri ile bile mümkün olduğundan emin değilim ama burada önce kontrol etmek istedim Kendi kişisel veri tabanımı MS Access tablo işlevine yazarım. Belki benim sqlalchemy motorum yanlış ayarlanmış mı?
cursor.execute(statement, parameters)
sqlalchemy.exc.DBAPIError: (Error) ('HY000', "[HY000] [Microsoft][ODBC Microsoft Access Driver] Could not find file 'C:\\INFORMATION_SCHEMA.mdb'. (-1811) (SQLExecDirectW)") u'SELECT [COLUMNS_1].[TABLE_SCHEMA], [COLUMNS_1].[TABLE_NAME], [COLUMNS_1].[COLUMN_NAME], [COLUMNS_1].[IS_NULLABLE], [COLUMNS_1].[DATA_TYPE], [COLUMNS_1].[ORDINAL_POSITION], [COLUMNS_1].[CHARACTER_MAXIMUM_LENGTH], [COLUMNS_1].[NUMERIC_PRECISION], [COLUMNS_1].[NUMERIC_SCALE], [COLUMNS_1].[COLUMN_DEFAULT], [COLUMNS_1].[COLLATION_NAME] \nFROM [INFORMATION_SCHEMA].[COLUMNS] AS [COLUMNS_1] \nWHERE [COLUMNS_1].[TABLE_NAME] = ? AND [COLUMNS_1].[TABLE_SCHEMA] = ?' (u'FruitsAndPets', u'dbo')
ve motorda mysql+pyodbc
için biten hata: Burada
mssql+pyodbc
ile benim hata sonu
cursor.execute(statement, parameters)
sqlalchemy.exc.ProgrammingError: (ProgrammingError) ('42000', "[42000] [Microsoft][ODBC Microsoft Access Driver] Invalid SQL statement; expected 'DELETE', 'INSERT', 'PROCEDURE', 'SELECT', or 'UPDATE'. (-3500) (SQLExecDirectW)") "SHOW VARIABLES LIKE 'character_set%%'"()
Sadece nota, ben eğer umurumda değil Ben sqlalchemy veya pandalar kullanıyorum to_sql()
Ben sadece kolayca MS Access veritabanına bir dataframe almak için kolay bir yol arıyorum. Eğer JSON'a dökülürse, SQL kullanarak satırlar eklemek için bir döngü fonksiyonu varsa, her ne olursa olsun, iyi çalışırsa onu alırım.