【发布时间】:2026-01-02 10:00:02
【问题描述】:
from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField, BooleanField, SubmitField,IntegerField
from wtforms.validators import DataRequired
from flask import Flask,render_template
import os
import requests
import mysql.connector
import sys
import json
mydb = mysql.connector.connect(
host="localhost",
user="tester",
password="test@123",
database="flaskapp"
)
cur=mydb.cursor()
def insert_steamid(s):
api_key=""
res=requests.get("https://api.brawlhalla.com/search?steamid="+str(s)+"&api_key="+api_key);
data=json.loads(res.text)
brawl_id=str(data['brawlhalla_id'])
res2=requests.get("https://api.brawlhalla.com/player/"+brawl_id+"/ranked?api_key="+api_key)
data2=json.loads(res2.text)
rank=data2['global_rank']
# if(rank==0):
# return("no competitive stats available")
temp=(rank,data2['name'],data2['brawlhalla_id'],data2['region'],data2['legends'][0]['legend_id'])
sql = "insert into test_table values (%s,%s,%s,%s,%s)"
try:
cur.execute(sql,temp)
mydb.commit()
return("data added")
except mysql.connector.Error as err:
return(err)
class Config(object):
SECRET_KEY = os.environ.get('SECRET_KEY') or 'you-will-never-guess'
app = Flask(__name__)
app.config.from_object(Config)
class LoginForm(FlaskForm):
username = IntegerField('Username', validators=[DataRequired()])
submit = SubmitField('Sign In')
main_query="select players_1v1.rankp , players_1v1.name , players_1v1.region , legends.legend_name_key from players_1v1,legends where players_1v1.best_legend = legends.legend_id ;"
cur.execute(main_query)
data=cur.fetchall()
cur.close()
mydb.close()
@app.route('/',methods=['GET','POST'])
def example():
print("ss")
# cursor.execute("select * from legends")
# data = cursor.fetchall()
return render_template("index.html", test=data)
@app.route('/ent',methods=['GET','POST'])
def login():
steam_id=int(0)
form = LoginForm()
msg=str('')
if form.validate_on_submit():
msg=insert_steamid(form.username.data)
print(msg)
# print('Login requested for user {}, remember_me={}'.format(
# form.username.data, "u"))
else:
print("no")
return render_template('form.html', title='Sign In', form=form, message=msg)
if __name__ == '__main__':
app.run(debug=True)
这是我的程序,我想做的是从一个函数运行一些 SQL 查询,但这似乎效果不佳。我必须再次在函数中重新定义 mydb 和 cur 才能使其正常工作。我究竟做错了什么?
编辑:在执行main_query 之后,insert_steamid 函数调用光标之前,我关闭了光标。这是我的一个愚蠢的错误
【问题讨论】:
-
我没有看到 (python) 函数...
-
“似乎效果不佳”并不是对您问题的准确描述。至少你应该添加
insert_steamid的代码,肯定还有更多的东西吗?而且,光标实际上做了什么。光标可能也必须在函数内移动,具体取决于您要实现的目标。出于讨论的目的,此代码不完整,因为它没有完全说明“问题”。 -
@Luuk 我已经编辑了函数并添加了整个东西,
-
你不需要
global cur。你需要cur = mydb.cursor()。 -
为什么我在你的代码中看到
cur.close() mydb.close()?
标签: python mysql flask scope mysql-connector