python - pyodbc.ProgrammingError: ('SQL 包含 0 个参数标记,但提供了 3 个参数', 'HY000')
问题描述
我正在使用 Python 3.6、flask、pyodbc,并连接到 SQL Server。
我正在尝试连接到数据库,然后使用参数创建查询。
这是代码:
应用程序.py
from flask import Flask, render_template, flash, redirect, url_for, session, request, logging
from wtforms import Form, StringField, TextAreaField, PasswordField, validators
from passlib.hash import sha256_crypt
from functools import wraps
import pyodbc
import os
app = Flask(__name__)
# Config SQL Server
conn = pyodbc.connect("DRIVER={ODBC Driver 11 for SQL Server};"
"SERVER=(local);"
"DATABASE=Restaurant;"
"UID=sa;"
"PWD=1tc0r3;"
"Trusted_Connection=yes;")
# ----------------------------------------------------
@app.route("/")
def hello():
return render_template('accounts/login.html', clients=clients)
# ----------------------------------------------------
# Register Form Class
class RegisterForm(Form):
name = StringField('Fullname', [validators.Length(min=1, max=50)])
email = StringField('EmailAddress', [validators.Length(min=6, max=50)])
password = PasswordField('Password', [
validators.DataRequired(),
validators.EqualTo('confirm', message='Passwords do not match')
])
confirm = PasswordField('Confirm Password')
# ----------------------------------------------------
# User Register
@app.route('/register', methods=['GET', 'POST'])
def register():
form = RegisterForm(request.form)
if request.method == 'POST' and form.validate():
name = form.name.data
email = form.email.data
password = sha256_crypt.encrypt(str(form.password.data))
# Create cursor
cur = conn.cursor()
# Execute query
cur.execute("INSERT INTO Users(Fullname, EmailAddress, Password) VALUES(%s, %s, %s)", (name, email, password))
# Commit to DB
conn.commit()
# Close connection
cur.close()
flash('You are now registered and can log in', 'success')
return redirect(url_for('hello'))
return render_template('accounts/register.html', form=form)
if __name__ == '__main__':
app.secret_key='1234'
app.debug = True
host = os.environ.get('IP', '127.0.0.1')
port = int(os.environ.get('PORT', 5050))
app.run(host=host, port=port)
注册.html
{% extends 'layouts/account_base.html'%}
{% block body %}
<div class="register-box-body">
<p class="login-box-msg">Register a new membership</p>
{% from "includes/_formhelpers.html" import render_field %}
<form class="site-form" method="POST" action="">
<div class="form-group">
{{render_field(form.name, class_="form-control")}}
</div>
<div class="form-group">
{{render_field(form.email, class_="form-control")}}
</div>
<div class="form-group">
{{render_field(form.password, class_="form-control")}}
</div>
<div class="form-group">
{{render_field(form.confirm, class_="form-control")}}
</div>
<p><input type="submit" class="btn btn-primary" value="Submit"></p>
</form>
</div>
{% endblock %}
当我运行程序时,我得到了这个错误:
pyodbc.ProgrammingError: ('SQL 包含 0 个参数标记,但提供了 3 个参数', 'HY000')
解决方案
pyodbc 使用?
, not %s
, 作为参数占位符。
推荐阅读
- javascript - Express.js 上的 GET 请求正在返回数据库中的所有值
- c# - 使用户控件在 Windows 窗体中的按钮上可见(C#)
- java - Gradle:程序类型已经存在
- java - 使用字符串而不是对象连接到另一个实体
- go - 我如何在多个其他 Goroutine 上等待单个 Goroutine 响应?
- reactjs - react-router - 将私人页面重定向到登录页面不起作用
- c++ - Arduino代码:输入结束时应为“}”
- presto - presto + 如何管理 presto 服务器停止/启动/状态操作
- mysql - 在当前项目 id 周围选择 N 个上一个和 M 个下一个项目
- python - 如何更改 Alembic 中主键字段的长度?