(请参阅屏幕截图..现在编辑)无法使用 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()