【发布时间】:2021-01-09 04:26:12
【问题描述】:
我正在尝试按照本教程使 Flask 应用与 Google Cloud SQL 一起使用:
https://www.smashingmagazine.com/2020/08/api-flask-google-cloudsql-app-engine/
除了 MySQL 连接之外,一切都很顺利,它触发了这个 UnboundLocalError: local variable 'conn' referenced before assignment 错误,这似乎与 Python 相关,而不是教程中的框架。有什么想法吗?
这是导致问题的代码:
def open_connection():
unix_socket = '/cloudsql/{}'.format(db_connection_name)
try:
if os.environ.get('GAE_ENV') == 'standard':
conn = pymysql.connect(user=db_user, password=db_password,
unix_socket=unix_socket, db=db_name,
cursorclass=pymysql.cursors.DictCursor
)
except pymysql.MySQLError as e:
print(e)
return conn
def get_songs():
conn = open_connection()
with conn.cursor() as cursor:
result = cursor.execute('SELECT * FROM songs;')
songs = cursor.fetchall()
if result > 0:
got_songs = jsonify(songs)
else:
got_songs = 'No Songs in DB'
conn.close()
return got_songs
错误信息:
return self.view_functions[rule.endpoint](**req.view_args)
File "/Users/timpeterson/python/flask-app/api/main.py", line 16, in songs
return get_songs()
File "/Users/timpeterson/python/flask-app/api/db.py", line 26, in get_songs
conn = open_connection()
File "/Users/timpeterson/python/flask-app/api/db.py", line 23, in open_connection
return conn
UnboundLocalError: local variable 'conn' referenced before assignment
【问题讨论】:
-
我的第一个想法是你的
try/execept块隐藏了一个错误。试着把你的网撒得更广,看看是否有非pymysql.MySQLError进来。 -
谢谢@PGHE。错误似乎出现在“return conn”而不是 pymysql。我不知道为什么它没有被分配,特别是因为我没有改变教程中的任何东西。
-
我认为你应该删除
if os.environ.get('GAE_ENV') == 'standard':,它应该可以工作 -
要调试,只需在
open_connection的第一行添加conn=None即可。
标签: python google-app-engine flask global google-cloud-sql