मैं एक डीबी टेबल में नए Google Analytics खाते लिखना चाहता हूं यदि कोई हो।

एक के बाद एक, एक पंक्ति में 5 कार्य निष्पादित होते हैं:

  1. db_connection() - डेटाबेस से कनेक्ट करें
  2. get_current_sql_account_table() - Google Analytics खातों के साथ डेटाफ़्रेम प्रारूप में वास्तविक SQL तालिका प्राप्त करता है
  3. get_account_list() - GA खातों की सूची प्राप्त करता है और इसे डेटाफ़्रेम में रूपांतरित करता है
  4. compare_df() - 2 डेटाफ़्रेम की तुलना करता है और यदि नए GA खाते हैं तो उन्हें इस फ़ंक्शन के साथ DB में लिखते हैं
  5. write_new_accounts_to_DB()

और GA सेवा कुंजी क्रेडेंशियल वेरिएबल में डालते हैं।

कोड स्वयं ठीक काम करता है, लेकिन जब इसे कार्यों में लपेटा गया और निष्पादित किया गया तो मुझे एक त्रुटि मिली:

AttributeError: 'NoneType' object has no attribute 'cursor'
  1. db_connection()
  2. get_current_sql_account_table() ======== यहाँ समस्या है
  3. get_account_list()
  4. compare_df()
  5. write_new_accounts_to_DB()

cursor को get_current_sql_account_table() फ़ंक्शन में परिभाषित किया गया है:

def db_connection():

    #set parameters for connecting with the DB
    config = dict(server='Server', 
              port=Port,
              database='DB',
              username='User',
              password='Pass')

    #set parameters
    conn_str = ('SERVER={server},{port};'   +
            'DATABASE={database};'      +
            'UID={username};'           +
            'PWD={password}')

    #connect to DB
    conn = pyodbc.connect(
        r'DRIVER={Driver};' +
        conn_str.format(**config)
    )

    #open the cursor
    cursor = conn.cursor()

मैंने get_current_sql_account_table() फ़ंक्शन में एक पैरामीटर के रूप में db_connection पास करने का प्रयास किया है:

def get_current_sql_account_table(conn):
    conn=db_connection
    sql_table_current = pd.read_sql('SELECT * FROM Table', con=conn)
    return sql_table_current

लेकिन वही त्रुटि मिली

तब मैंने सब कुछ चलाने की कोशिश की है, लेकिन डीबी कॉन्फ़िगरेशन फ़ंक्शन में नहीं है और एक और त्रुटि है

NameError: name 'sql_table_current' is not defined.

मैंने सब कुछ मुख्य में रखा:

def main():
    sql_table_current_table=get_current_sql_account_table()
    accounts_response=get_account_list()
    conn=db_connection()
    compare_df()
    

if __name__ == '__main__':
    main()

और यह त्रुटि TypeError: compare_df() missing 2 required positional arguments: 'sql_table_current_table' and 'accounts_response' है।

मैं समझता हूं कि एक बेवकूफी भरी गलती है, लेकिन समझ में नहीं आता कि

अद्यतन

जब मैंने इस कोड को चलाने के लिए tio की कोशिश की


def main():

    sql_table_current_table=get_current_sql_account_table()
    accounts_response=get_account_list()
    conn=db_connection()
    compare_df()
    

if __name__ == '__main__':
    main()

यह त्रुटि मिली

NameError                                 Traceback (most recent call last)
<ipython-input-10-4c89335f4c9b> in <module>
     21 
     22 if __name__ == '__main__':
---> 23     main()

<ipython-input-10-4c89335f4c9b> in main()
      8     logging.info('Finished')
      9 
---> 10     sql_table_current_table=get_current_sql_account_table()
     11     accounts_response=get_account_list()
     12     conn=db_connection()

<ipython-input-2-92eb504dec52> in get_current_sql_account_table()
      1 def get_current_sql_account_table():
----> 2     sql_table_current = pd.read_sql('SELECT * FROM Table', con=conn)
      3     return sql_table_current

NameError: name 'conn' is not defined

लेकिन मैंने पहले इस तरह conn=db_connection() डाला था

0
Anna 15 अगस्त 2019, 13:58

2 जवाब

सबसे बढ़िया उत्तर

मुझे कर्सर को वैश्विक चर के रूप में नामित करना था।

-1
Anna Dmitrieva 18 अगस्त 2019, 11:31

आपका db_connection() फ़ंक्शन कुछ भी वापस नहीं करता है इसलिए आपके कथन में conn = db_connection(), conn का कोई मूल्य नहीं है। आपके कोड में अन्य संभावित त्रुटियां हैं।

0
Neeraj Agarwal 16 अगस्त 2019, 15:25