2015-01-13 50 views
-1

我從終端創建一個數據庫表,現在我想插入數據到它使用下面的代碼,sql_insert_reg語句,它被用作SQL insert命令與我在終端插入操作中使用的相同,但是在python文件中使用不會插入數據。我正在學習使用mysql在flask中,這裏是我的代碼。此代碼不會給出錯誤,但不會執行任何操作,因爲我期望它!(見截圖..編輯現在)無法插入數據到MySQLdb使用python-flask

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) 

這是我上傳below..please看到的條目USEID 2則直接進入6 ..和我被改變的答案,建議我看到這個截圖!任何人都可以瞭望現場背後的問題! Image

請幫幫我!

+0

不,不,不。今年的新年度決議需要永遠不要再使用%運算符編寫SQL,即使對於測試系統也是如此。你應該養成使用cursor.execute()來構建每個查詢的習慣,每次都是這樣,沒有例外。然後閱讀如何使用salted hash值管理auth ...不要再以純文本存儲密碼。 – dylrei

+0

@dylrei好的我會讓我的代碼更好...謝謝...你能幫忙找出答案 –

回答

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

這是一個典型的INSERT語句中是什麼樣子:

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

請注意,如果你的第一列是自動增量(如某種指數的),你可以ommit,從語句和只寫它如下:

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

它沒有關係使用...我的工作也很好! –

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

如果做這樣的說法並沒有我們希望的,請提供更多的細節上發生了什麼,你期待什麼,你怎麼知道你沒有,你希望看到什麼。

+0

它給了我_mysql_exceptions.ProgrammingError –

+0

它給了我相同的....錯誤被刪除..我的數據庫沒有改變 –

0

這可能是你的問題

ursor.execute(sql_insert_reg,(username,password)) 

看起來應該是

cursor.execute(sql_insert_reg,(username,password)) 

,如果那不是它,我只想使用SQLAlchemy爲您生成

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:[email protected]_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) 
的sql

那麼如果你想操縱數據,你可以從上面更改這個

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

這幫了我......但我仍然厭惡爲什麼我的回答是不給這個神奇的!我無法找出問題是什麼與我的代碼!!反正如果你可以建議一些答案沒有sqlalchemy部分..請解釋..如果我不得不進行這一過程! –

相關問題