2017-05-25 11 views
0

mysqlデータベースからPythonにデータをインポートする関数を記述しました。この関数は、関数を含むファイルで実行すると機能しますが、別のPythonファイルに関数をインポートしようとすると、「Unbound LocalError」エラーが発生します。UnboundLocalError:インポートされた関数の代入の前に参照されるローカル変数

私はすでに変数 'sqlcode_sm'をグローバルとして宣言しようとしましたが、問題は解決しません。

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 

私は今、継続して書く場合:

df = sec_master_retriever('*') 

これは問題なく動作しますが、新しいPythonのファイルを開く機能をインポートすると、以下のようにそれを実行する:

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

エラー:「UnboundLocalError:割り当て前に参照されるローカル変数 'sqlcode_sm'」 あなたの助け

+0

おかげで以下のためのおかげで、これは問題を解決しました! – sebseb

答えて

0

移動このライン

pymysql.install_as_MySQLdb() 

いずれか

def sec_master... 

内部または

if __name__ == '__main__': 
関連する問題