2010-09-02 11 views
2

J'ai plusieurs fichiers csv que j'ai besoin de transférer au format mdb. J'ai essayé la réponse dans ce post comme point de départ:comment créer un fichier mdb à partir d'un fichier csv en python?

How do you create a mdb database file in Python?

Source:

from comtypes.client import CreateObject 

access = CreateObject('Access.Application') 

from comtypes.gen import Access 

DBEngine = access.DBEngine 
db = DBEngine.CreateDatabase('test.mdb', Access.DB_LANG_GENERAL) 


db.BeginTrans() 

db.Execute("CREATE TABLE test (ID Text, numapples Integer)") 
db.Execute("INSERT INTO test VALUES ('ABC', 3)") 

db.CommitTrans() 
db.Close() 

Mais j'ai reçu les erreurs suivantes:

Traceback (most recent call last): 
    File "C:\Documents and Settings\rkelly1\Desktop\New Folder (6)\testwrite.py", line 3, in ? 
access = CreateObject('Access.Application') 
    File "C:\Python24\Lib\site-packages\comtypes\client\__init__.py", line 242, in CreateObject 
return _manage(obj, clsid, interface=interface) 
    File "C:\Python24\Lib\site-packages\comtypes\client\__init__.py", line 188, in _manage 
obj = GetBestInterface(obj) 
    File "C:\Python24\Lib\site-packages\comtypes\client\__init__.py", line 112, in GetBestInterface 
interface = getattr(mod, itf_name) 
AttributeError: 'module' object has no attribute '_Application' 

Tout ce que je dois faire est prendre un fichier .csv, et créer une base de données avec lui au format mdb. J'ai une certaine expérience avec sql, mais pas avec la création de fichiers de base de données d'accès ....

EDIT:

Je ne propose pas que ce soit la bonne solution .... Si vous avez une meilleure s'il vous plaît laissez moi

EDIT: la première fois que le script est exécuté après une nouvelle installation de comtypes je reçois ces erreurs:

# Generating comtypes.gen._4AFFC9A0_5F99_101B_AF4E_00AA003F0F07_0_9_0 
# Generating comtypes.gen._2DF8D04C_5BFA_101B_BDE5_00AA0044DE52_0_2_4 
# Generating comtypes.gen._00020430_0000_0000_C000_000000000046_0_2_0 
# Generating comtypes.gen.stdole 
Traceback (most recent call last): 
    File "C:\Documents and Settings\rkelly1\Desktop\New Folder (6)\testwrite.py", line 3, in ? 
    access = CreateObject('Access.Application') 
    File "C:\Python24\Lib\site-packages\comtypes\client\__init__.py", line 242, in CreateObject 
    return _manage(obj, clsid, interface=interface) 
    File "C:\Python24\Lib\site-packages\comtypes\client\__init__.py", line 188, in _manage 
    obj = GetBestInterface(obj) 
    File "C:\Python24\Lib\site-packages\comtypes\client\__init__.py", line 110, in GetBestInterface 
    mod = GetModule(tlib) 
    File "C:\Python24\Lib\site-packages\comtypes\client\_generate.py", line 112, in GetModule 
    mod = _CreateWrapper(tlib, pathname) 
    File "C:\Python24\Lib\site-packages\comtypes\client\_generate.py", line 176, in _CreateWrapper 
    generate_module(tlib, ofi, pathname) 
    File "C:\Python24\Lib\site-packages\comtypes\tools\tlbparser.py", line 716, in generate_module 
    gen.generate_code(items.values(), filename=pathname) 
    File "C:\Python24\Lib\site-packages\comtypes\tools\codegenerator.py", line 238, in generate_code 
    self.generate_all(items) 
    File "C:\Python24\Lib\site-packages\comtypes\tools\codegenerator.py", line 186, in generate_all 
    self.generate(item) 
    File "C:\Python24\Lib\site-packages\comtypes\tools\codegenerator.py", line 182, in generate 
    mth(item) 
    File "C:\Python24\Lib\site-packages\comtypes\tools\codegenerator.py", line 689, in ComInterface 
    self.generate(itf.get_head()) 
    File "C:\Python24\Lib\site-packages\comtypes\tools\codegenerator.py", line 182, in generate 
    mth(item) 
    File "C:\Python24\Lib\site-packages\comtypes\tools\codegenerator.py", line 710, in ComInterfaceHead 
    self.generate(base.get_head()) 
    File "C:\Python24\Lib\site-packages\comtypes\tools\codegenerator.py", line 182, in generate 
    mth(item) 
    File "C:\Python24\Lib\site-packages\comtypes\tools\codegenerator.py", line 616, in External 
    comtypes.client.GetModule(ext.tlib) 
    File "C:\Python24\Lib\site-packages\comtypes\client\_generate.py", line 112, in GetModule 
    mod = _CreateWrapper(tlib, pathname) 
    File "C:\Python24\Lib\site-packages\comtypes\client\_generate.py", line 188, in _CreateWrapper 
    mod = _my_import(fullname) 
    File "C:\Python24\Lib\site-packages\comtypes\client\_generate.py", line 26, in _my_import 
    return __import__(fullname, globals(), locals(), ['DUMMY']) 
    File "C:\Python24\lib\site-packages\comtypes\gen\_2DF8D04C_5BFA_101B_BDE5_00AA0044DE52_0_2_4.py", line 82 
    (['retval', 'out'], POINTER(POINTER(IDispatch)), 'ppidisp')), 
COMMETHOD([dispid(1610743809), 'propget'], HRESULT, 'Creator', 
                  ^
SyntaxError: invalid syntax 
+1

Sans la source de votre script, il est très difficile de deviner ce qui se passe là-bas. –

+0

@Fabian la source provenait de la réponse liée, mais je comprends ce que vous dites. Modification maintenant ... – Richard

Répondre

4

La première chose que je suggère est la mise à niveau vers Python 2.7 si possible.

Deuxièmement, avez-vous essayé win32com?

Voici un script de test qui fait ce que vous avez ci-dessus:

import win32com.client 
import os 

def main(): 
    db_path = r'C:\temp.mdb' 
    if os.path.exists(db_path): 
     os.remove(db_path) 

    db_eng = win32com.client.gencache.EnsureDispatch("DAO.DBEngine.36") 
    db = db_eng.CreateDatabase(db_path, win32com.client.constants.dbLangGeneral) 

    db.Execute("CREATE TABLE test (ID Text, numapples Integer)") 
    db.Execute("INSERT INTO test VALUES ('ABC', 3)") 

    db.Close() 


if __name__ == '__main__': 
    main() 
+0

Merci. +1 Cela fonctionne comme prévu: D – Richard

+0

Je trouve que déplacer vers python 2.7 est une tâche effrayante vu que la plupart des scripts que je gère sont écrits avec python 2.4: S – Richard

+1

Un avantage de cette approche est qu'elle dépend des composants installés sur chaque copie de Windows (depuis Win2000) - il utilise DAO et le moteur de base de données Jet, au lieu de tenter d'automatiser Access, qui peut ne pas être installé. –

2

Vous n'avez pas accès installé sur l'ordinateur sur lequel ce script est en cours d'exécution.

+0

hmmm ... Mais je fais. J'ai accès 2007 – Richard

+1

@Richard: hmm ... enquêter ... – katrielalex

+2

@Richard: Je ne peux pas reproduire cela du tout ... vous faites la bonne chose. J'essaierais la réponse de @ tgray. – katrielalex

Questions connexes