我从终端创建了一个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 ..我通过改变建议的答案来看到这个!!可以任何人了解背后的问题现场!
请帮帮我!
答案 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()