(请参阅屏幕截图..现在编辑)无法使用 python-flask 将数据插入 MySQLdb
(see the screenshot..edited now)could not insert data into MySQLdb using python-flask
我从终端创建了一个数据库 table,现在我想使用以下代码向其中插入数据,sql_insert_reg 用作 sql 插入命令的语句与我在终端插入操作中使用但在 python 文件中使用不插入数据。我正在学习在烧瓶中使用 mysql,这是我的 code.This 代码没有给出错误但什么都不做我期待它!
mysql = MySQL()
app.config['MYSQL_DATABASE_USER'] = 'root'
app.config['MYSQL_DATABASE_PASSWORD'] = 'root'
app.config['MYSQL_DATABASE_DB'] = 'EmpData'
app.config['MYSQL_DATABASE_HOST'] = 'localhost'
mysql.init_app(app)
class RegistrationForm(Form):
username = TextField('Username', [validators.Length(min=4, max=25)])
password = PasswordField('New Password', [
validators.Required(),
validators.EqualTo('confirm', message='Passwords must match')])
confirm = PasswordField('Repeat Password')
accept_tos = BooleanField('I accept the TOS', [validators.Required()])
@app.route('/register',methods=['GET','POST'])
def register():
form = RegistrationForm(request.form)
flash('login details')
session['tmp'] = 43
if request.method == 'POST' and form.validate():
username = form.username.data
password = form.password.data
sql_insert_reg = "INSERT INTO User(userName,password) VALUES(%s,%s)"
#flash(sql_insert_reg)
conn = mysql.connect()
cursor = mysql.get_db().cursor()
cursor.execute(sql_insert_reg,(username,password))
conn.commit()
return render_template('register.html',form=form)
这是我在下面上传的屏幕截图。请查看条目 useId 2 然后直接转到 6 ..我通过按照建议修改答案来看到这个!!任何人都可以留意幕后问题!
请帮帮我!
这是典型的 INSERT 语句的样子:
INSERT INTO table (column1,column2,column3) VALUES (value1,value2,value3);
请注意,如果您的第一列是自动递增的(例如某种索引),您可以从语句中省略它并按如下方式编写:
INSERT INTO User (user_column, pass_column) VALUES ('foo', 'bar');
所以...不要这样做:
sql = "INSERT INTO Table VALUES(NULL,'%s','%s')"%(username,password)+";"
改为这样做:
sql = "INSERT INTO Table (col1, col2) VALUES (%s, %s)"
cursor.execute(sql, (value1, value2))
为什么?因为这会清理您的输入,并且您最终不会注册 Bobby Drop Table 为用户。
如果这样做没有达到您的期望,请提供更多详细信息,说明正在发生的事情、您的期望以及您如何知道您没有得到您期望看到的结果。
这可能是你的问题
ursor.execute(sql_insert_reg,(username,password))
看起来应该是
cursor.execute(sql_insert_reg,(username,password))
如果不是这样,我会使用 sqlalchemy 为您生成 sql
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker,scoped_session
import sqlalchemy as sa
Model = declarative_base()
engine = sa.create_engine('mysql://DB_USERNAME:DB_PASSWORD@DB_HOST:DB_PORT/DB_NAME')
Session = scoped_session(sessionmaker(bind=engine))
db_session = Session()
class User(Model):
__tablename__ = 'users'
id = sq.Column(sq.Integer,primary_key=True)
username = sq.Column(sq.String(255),nullable=False,unique=True)
password = sq.Column(sq.Text,nullable=False)
然后如果你想操作数据你可以从上面改变这个
username = form.username.data
password = form.password.data
sql_insert_reg = "INSERT INTO User(userName,password) VALUES(%s,%s)"
#flash(sql_insert_reg)
conn = mysql.connect()
cursor = mysql.get_db().cursor()
ursor.execute(sql_insert_reg,(username,password))
conn.commit()
至此
user = User(username=form.username.data,password=form.password.data)
db_session.add(user)
db_session.commit()
我更改了一些代码,发现 mysql 我没有使用上面的代码行,而是得到了这个魔法!
import MySQLdb
# Open database connection
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )
# prepare a cursor object using cursor() method
cursor = db.cursor()
sql = """INSERT INTO EMPLOYEE(FIRST_NAME,
LAST_NAME, AGE, SEX, INCOME)
VALUES ('Mac', 'Mohan', 20, 'M', 2000)"""
try:
# Execute the SQL command
cursor.execute(sql)
# Commit your changes in the database
db.commit()
except:
# Rollback in case there is any error
db.rollback()
# disconnect from server
db.close()
我从终端创建了一个数据库 table,现在我想使用以下代码向其中插入数据,sql_insert_reg 用作 sql 插入命令的语句与我在终端插入操作中使用但在 python 文件中使用不插入数据。我正在学习在烧瓶中使用 mysql,这是我的 code.This 代码没有给出错误但什么都不做我期待它!
mysql = MySQL()
app.config['MYSQL_DATABASE_USER'] = 'root'
app.config['MYSQL_DATABASE_PASSWORD'] = 'root'
app.config['MYSQL_DATABASE_DB'] = 'EmpData'
app.config['MYSQL_DATABASE_HOST'] = 'localhost'
mysql.init_app(app)
class RegistrationForm(Form):
username = TextField('Username', [validators.Length(min=4, max=25)])
password = PasswordField('New Password', [
validators.Required(),
validators.EqualTo('confirm', message='Passwords must match')])
confirm = PasswordField('Repeat Password')
accept_tos = BooleanField('I accept the TOS', [validators.Required()])
@app.route('/register',methods=['GET','POST'])
def register():
form = RegistrationForm(request.form)
flash('login details')
session['tmp'] = 43
if request.method == 'POST' and form.validate():
username = form.username.data
password = form.password.data
sql_insert_reg = "INSERT INTO User(userName,password) VALUES(%s,%s)"
#flash(sql_insert_reg)
conn = mysql.connect()
cursor = mysql.get_db().cursor()
cursor.execute(sql_insert_reg,(username,password))
conn.commit()
return render_template('register.html',form=form)
这是我在下面上传的屏幕截图。请查看条目 useId 2 然后直接转到 6 ..我通过按照建议修改答案来看到这个!!任何人都可以留意幕后问题!
请帮帮我!
这是典型的 INSERT 语句的样子:
INSERT INTO table (column1,column2,column3) VALUES (value1,value2,value3);
请注意,如果您的第一列是自动递增的(例如某种索引),您可以从语句中省略它并按如下方式编写:
INSERT INTO User (user_column, pass_column) VALUES ('foo', 'bar');
所以...不要这样做:
sql = "INSERT INTO Table VALUES(NULL,'%s','%s')"%(username,password)+";"
改为这样做:
sql = "INSERT INTO Table (col1, col2) VALUES (%s, %s)"
cursor.execute(sql, (value1, value2))
为什么?因为这会清理您的输入,并且您最终不会注册 Bobby Drop Table 为用户。
如果这样做没有达到您的期望,请提供更多详细信息,说明正在发生的事情、您的期望以及您如何知道您没有得到您期望看到的结果。
这可能是你的问题
ursor.execute(sql_insert_reg,(username,password))
看起来应该是
cursor.execute(sql_insert_reg,(username,password))
如果不是这样,我会使用 sqlalchemy 为您生成 sql
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker,scoped_session
import sqlalchemy as sa
Model = declarative_base()
engine = sa.create_engine('mysql://DB_USERNAME:DB_PASSWORD@DB_HOST:DB_PORT/DB_NAME')
Session = scoped_session(sessionmaker(bind=engine))
db_session = Session()
class User(Model):
__tablename__ = 'users'
id = sq.Column(sq.Integer,primary_key=True)
username = sq.Column(sq.String(255),nullable=False,unique=True)
password = sq.Column(sq.Text,nullable=False)
然后如果你想操作数据你可以从上面改变这个
username = form.username.data
password = form.password.data
sql_insert_reg = "INSERT INTO User(userName,password) VALUES(%s,%s)"
#flash(sql_insert_reg)
conn = mysql.connect()
cursor = mysql.get_db().cursor()
ursor.execute(sql_insert_reg,(username,password))
conn.commit()
至此
user = User(username=form.username.data,password=form.password.data)
db_session.add(user)
db_session.commit()
我更改了一些代码,发现 mysql 我没有使用上面的代码行,而是得到了这个魔法!
import MySQLdb
# Open database connection
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )
# prepare a cursor object using cursor() method
cursor = db.cursor()
sql = """INSERT INTO EMPLOYEE(FIRST_NAME,
LAST_NAME, AGE, SEX, INCOME)
VALUES ('Mac', 'Mohan', 20, 'M', 2000)"""
try:
# Execute the SQL command
cursor.execute(sql)
# Commit your changes in the database
db.commit()
except:
# Rollback in case there is any error
db.rollback()
# disconnect from server
db.close()