如果有的话,我想在数据库表中写入新的 Google Analytics 帐户。
有 5 个函数连续执行,一个接一个:
db_connection()
- 连接到数据库get_current_sql_account_table()
- 以数据帧格式使用 Google Analytics 帐户获取实际 SQL 表get_account_list()
- 获取 GA 帐户列表并将其转换为数据帧compare_df()
- 比较 2 个数据帧,如果有新的 GA 帐户,则使用此函数将它们写入数据库write_new_accounts_to_DB()
GA 服务密钥凭据放在变量中。
代码本身工作正常,但是当它被包装成函数并执行时,我得到了一个错误:
AttributeError: 'NoneType' object has no attribute 'cursor'
db_connection()
get_current_sql_account_table()
======== 这里是问题get_account_list()
compare_df()
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()
我试图db_connection
在get_current_sql_account_table()
函数中将a作为参数传递:
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
但得到了同样的错误
然后我尝试运行所有内容,但是 db config 不在函数中并且有另一个错误
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() 像这样
我不得不将游标命名为全局变量。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句