2017-01-20 7 views
1

Ich bin völlig neu mit sqlalchemy und postgresql. Ich las this Tutorial das folgende Stück Code zu bauen:'Modul' Objekt ist nicht aufrufbar mit sqlalchemy

import sqlalchemy 
from sqlalchemy import create_engine 
from sqlalchemy import engine 


def connect(user, password, db, host='localhost', port=5432): 
    '''Returns a connection and a metadata object''' 
    # We connect with the help of the PostgreSQL URL 
    # postgresql://federer:[email protected]:5432/tennis 
    url = 'postgresql://{}:{}@{}:{}/{}' 
    url = url.format(user, password, host, port, db) 

    # The return value of create_engine() is our connection object 
    con = sqlalchemy.create_engine(url, client_encoding='utf8') 

    # We then bind the connection to MetaData() 
    meta = sqlalchemy.MetaData(bind=con, reflect=True) 

    return con, meta 

con, meta = connect('federer', 'grandestslam', 'tennis') 
con 
engine('postgresql://federer:***@localhost:5432/tennis') 
meta 
MetaData(bind=Engine('postgresql://federer:***@localhost:5432/tennis')) 

Wenn es läuft Ich habe diesen Fehler:

File "test.py", line 22, in <module> 
    engine('postgresql://federer:***@localhost:5432/tennis') 
    TypeError: 'module' object is not callable 

, was soll ich tun? Vielen Dank !

+0

Haben Sie Engine importiert? Woher kommt es? –

+0

@DanielRoseman tut mir leid. Ich habe es vermasselt und poste eine bereits gelöste Frage. Ich habe meinen Beitrag mit dem eigentlichen Problem bearbeitet. –

+0

Sind Sie auch neu bei Python? Der angezeigte Fehler ist selbsterklärend. 'Engine' ist ein Modul, das man nicht aufrufen kann. Ich verstehe nicht, was du zu tun versuchst. –

Antwort

2

Also, Ihr Problem geschieht, weil Sie diesen Anruf gemacht haben:

from sqlalchemy import engine 

Und dann haben Sie diese später in der Datei verwendet:

engine('postgresql://federer:***@localhost:5432/tennis') 

in diesem Abschnitt Merkwürdigerweise, Sie haben einige Aussagen, die nur con und meta ohne Zuweisungen oder Anrufe oder nichts sind. Ich bin mir nicht sicher, was du da machst. Ich würde vorschlagen, dass Sie die Seite von SQLalchemy auf engine and connection use überprüfen, um Ihnen zu helfen, sortiert zu werden.

Es hängt natürlich davon ab, wie genau Sie Ihre Datenbank eingerichtet haben. Ich benutzte das declarative_base Modul in einem meiner Projekte, so dass mein Prozess eine Sitzung der Einrichtung meiner DB verbinden sieht wie folgt aus:

from sqlalchemy import create_engine 
from sqlalchemy.orm import sessionmaker 

# Connect to Database and create database session 
engine = create_engine('postgresql://catalog:[email protected]/menus') 
Base.metadata.bind = engine 

DBSession = sessionmaker(bind=engine) 
session = DBSession() 

Und in meiner Datenbank-Setup-Datei, ich habe zugewiesen:

Base = declarative_base() 

Aber Sie müssen es ein wenig auf Ihre spezielle Einrichtung anpassen. Ich hoffe das hilft.

bearbeiten: Ich sehe jetzt, wo diese Anrufe zu con und meta kommen wurden, als auch Ihre anderen verwirrend Linien, es ist Teil des Tutorials Sie verknüpft. In diesem Tutorial verwendete er den Python-Interpreter in der Befehlszeile. Ich werde ein paar der Dinge, die er dort getan hat, in der Hoffnung erklären, dass es dir noch mehr hilft. Zeilen, die mit >>> beginnen, geben er als Befehle ein. Die anderen Zeilen sind die Ausgabe, die er zurückerhält.

>>> con, meta = connect('federer', 'grandestslam', 'tennis') # he creates the connection and meta objects 
>>> con # now he calls the connection by itself to have it show that it's connected to his DB 
Engine(postgresql://federer:***@localhost:5432/tennis) 
>>> meta # here he calls his meta object to show how it, too, is connected 
MetaData(bind=Engine(postgresql://federer:***@localhost:5432/tennis)) 
+0

Vielen Dank für all das. Ich werde versuchen, diese Arbeit mit Ihnen zu beraten. Vielleicht finden Sie auch ein anderes Tutorial! –

Verwandte Themen