提问人:Root 提问时间:11/17/2023 最后编辑:BarmarRoot 更新时间:11/17/2023 访问量:43
在 SQLAlchemy 中将列与表绑定
Binding columns with a table in SQLAlchemy
问:
我一直在尝试使用Flask建立一个网页,我目前在登录表单上:
from flask import Flask,render_template,request
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.app_context().push()
app.secret_key = 'hello'
app.config['SQLALCHEMY_DATABASE_URI']='sqlite:///users.sqlite3'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS']=False
db = SQLAlchemy(app)
counter = 1
class users(db.Model):
id = db.Column('id',db.Integer,primary_key=True)
name = db.Column('name',db.String(100))
password = db.Column('password',db.String(100))
role = db.Column('role',db.String(100))
def __init__(self,id:int,name:str,password:str,role:str):
self.name = name
self.password = password
self.id = counter
self.role = role
usr = users(0,'Samantha (Root) Groves','password','Grey-hat')
db.session.add(usr)
@app.route('/',methods=['POST','GET'])
def frontPage():
if request.method=='POST':
user = request.form['Username']
password = request.form['Password']
found_user = users.query.filter_by(name=user,password=password).first()
#if found_user:
#return 'Hello',found_user['name']
return "Hi"
else:
return render_template('mywebsite.html')
这是我的HTML网页:
<html>
<style>
button {
font-family: Verdana, Geneva, Tahoma, sans-serif;
font-size: medium;
color: black;
background-color: aliceblue;
border-style: hidden;
shape-outside: border-box;
cursor: default;
height: 36px;
width: 144px;
border-radius: 9px;
top: 500px;
left: 680px;
position: absolute;
}
button:hover {
background-color: orangered;
}
</style>
<head>
<title>Sign in/Sign up</title>
</head>
<body background="backColorWebsite.png">
<form action="#" method="post">
<label id="UsernameLabel" style="font-family: Verdana, Geneva, Tahoma, sans-serif; background-color: aliceblue;position:absolute; top: 250px;left:600px; width: 144px; height: 18px; border-radius:9px; text-align: center; font-size: medium; ">Username:</label>
<input type="text" name="Username" style="font-family:Verdana, Geneva, Tahoma, sans-serif; background-color: aliceblue; position: absolute; top:250px;left:760px; width:144px; height:27px; border-radius: 9px;" maxlength="10"></input>
<label id="PasswordLabel" style="font-family: Verdana, Geneva, Tahoma, sans-serif; background-color: aliceblue;position:absolute; top: 350px;left:600px; width: 144px; height: 18px; border-radius:9px; text-align: center; font-size: medium;">Password:</label>
<input type="password" name="Password" style="font-family:Verdana, Geneva, Tahoma, sans-serif; background-color: aliceblue; position: absolute; top:350px;left:760px; width:144px; height:27px; border-radius: 9px;"></input>
<button value="submit">Sign in</button>
</form>
</body>
</html>
当我在cmd上运行它时,它会打印出此错误:
sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) no such table: users
[SQL: SELECT users.id AS users_id, users.name AS users_name, users.password AS users_password, users.role AS users_role
FROM users
WHERE users.name = ? AND users.password = ?
LIMIT ? OFFSET ?]
[parameters: ('', '', 1, 0)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
127.0.0.1 - - [17/Nov/2023 01:36:40] "POST / HTTP/1.1" 500 -
所以很明显,没有一个表与列相关联,但是我们如何将表绑定到列呢?
该方法将其绑定到一个键,除此之外,我没有看到可以提供我想要的功能的函数。db.create_all()
有,但我正在关注一系列视频,从这个开始,但它
说你不是必需的,所以我有点困惑。db.Table
答:
0赞
0x00
11/17/2023
#1
查看 Flask-SQLAlchemy 文档,了解如何创建表。
定义完所有模型和表后,调用 SQLAlchemy.create_all() 在数据库中创建表架构。这需要应用程序上下文。由于此时您不在请求中,因此请手动创建一个。
with app.app_context(): db.create_all()
如果在其他模块中定义模型,则必须在调用 create_all 之前导入它们,否则 SQLAlchemy 将不知道它们。
因此,您将需要执行以创建表用户。db.create_all()
评论
0赞
Root
11/17/2023
我要把它放在 Users 类之后?
0赞
Root
11/17/2023
哦,太好了,它正在起作用!谢谢!
评论