(参见截图...现在编辑)无法使用python-flask将数据插入MySQLdb

时间:2015-01-13 18:12:24

标签: python mysql flask wtforms flask-wtforms

我从终端创建了一个db表,现在我想使用以下代码向它插入数据,sql_insert_reg语句用作sql insert命令与我在终端插入操作中使用的相同,但在python文件中使用不插入数据。我正在学习使用mysql,这是我的代码。这段代码没有给出错误,但没有像我期望的那样做!

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 ..我通过改变建议的答案来看到这个!!可以任何人了解背后的问题现场!Image

请帮帮我!

4 个答案:

答案 0 :(得分:0)

这是典型的INSERT语句:

INSERT INTO table (column1,column2,column3) VALUES (value1,value2,value3);

请注意,如果您的第一列是自动增量(例如某种索引),您可以从语句中省略它,只需按如下所示编写:

INSERT INTO User (user_column, pass_column) VALUES ('foo', 'bar');

答案 1 :(得分:0)

所以......不要这样做:

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

如果这样做并不符合您的期望,请提供更多有关正在发生的事情,您期望的内容以及您如何知道自己没有达到预期目标的详细信息。见。

答案 2 :(得分:0)

这可能是你的问题

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()

答案 3 :(得分:0)

我更改了一些代码并发现在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()