2017-05-25 9 views
0

Ich habe eine Funktion geschrieben, die Daten aus einer MySQL-Datenbank in Python importieren soll. Die Funktion funktioniert, wenn ich sie in der Datei ausführe, die die Funktion enthält, aber wenn ich versuche, die Funktion in eine andere Python-Datei zu importieren, erhalte ich den Fehler "Unbound LocalError".UnboundLocalError: lokale Variable referenziert vor Zuweisung nur in importierter Funktion

Ich habe bereits versucht, die Variable 'sqlcode_sm' als global zu deklarieren, aber es löst das Problem nicht.

from __future__ import print_function 
import pandas as pd 
import numpy as np 
import pymysql 
pymysql.install_as_MySQLdb() 
import MySQLdb as mdb 
from datetime import datetime 
import os 
import sys 


def sec_master_retriever(tables): 
    # should be any column(s) or * for all 

    sql_table  = "sec_master" 


    ######SQL PART: Retrieving the data 
    # Connect to the MySQL instance 
    db_host = 'localhost' 
    db_user = 'root' 
    db_pass = 'xyz' 
    db_name = 'securities_master' 
    con = mdb.connect(db_host, db_user, db_pass, db_name) 
    sqlcode_sm = """SELECT %s FROM %s AS sm ;""" % (tables, sql_table) 
    sqltable  = pd.read_sql_query(sqlcode_sm, con=con) 

    return sqltable 

wenn ich jetzt weiter und schreiben:

df = sec_master_retriever('*') 

Dies funktioniert ohne ein Problem, aber eine neue Python-Datei öffnen, importieren die Funktion und Ausführung es wie folgt:

from sec_master_retriever import sec_master_retriever as smr 
df2 = smr("*") 

Fehler im Ergebnis: "UnboundLocalError: lokale Variable 'sqlcode_sm', auf die vor der Zuweisung verwiesen wird"

Vielen Dank für Ihre Hilfe

+0

Dank hat dies das Problem gelöst! – sebseb

Antwort

0

verschieben diese Linie

pymysql.install_as_MySQLdb() 

entweder innerhalb

def sec_master... 

oder unter

if __name__ == '__main__': 
Verwandte Themen