2016-02-20 22 views
-1

我想python需要一個變量時,它要求的數據庫名稱,但它不工作這是我的代碼,我不知道我做錯了。嘗試python需要一個變量來創建表

有什麼想法嗎?

#!/usr/bin/python 
# -*- encoding: utf-8 -*- 

import MySQLdb 

name_db = raw_input('Type Data Base Name : ') 

bd = MySQLdb.connect("localhost","root","9090i","clientes") 

cursor = bd.cursor() 

sql = "CREATE TABLE name_db (NOMBRE CHAR(20) NOT NULL, APELLIDO CHAR(20), EDAD INT, SEXO CHAR(1), SALARIO FLOAT)" 

cursor.execute(sql) 

bd.close() 
+0

我不知道'phython',但我的猜測是你想創建一個名爲'name_db'的表。由於這是一個輸入字段(我假設),它應該結合到sql,而不是在字符串中進行硬編碼。參數化的查詢是可取的,但我不知道這是否支持python ... – sgeddes

回答

0

變化

sql = "CREATE TABLE name_db (NOMBRE CHAR(20) NOT NULL, APELLIDO CHAR(20), EDAD INT, SEXO CHAR(1), SALARIO FLOAT)" 

sql = "CREATE TABLE {name} (NOMBRE CHAR(20) NOT NULL, APELLIDO CHAR(20), EDAD INT, SEXO CHAR(1), SALARIO FLOAT)".format(name = name_db) 

的{name}是Python的字符串替換語法,所以這應該創建一個具有您在取代輸入的值恆定的SQL字符串表名。

要檢查此操作,在執行之前打印出SQL是個好主意。這使您更容易明白爲什麼代碼無法正常工作。

+0

感謝您的回答,打印功能運作良好,但MySQL提供了這樣的錯誤:_mysql_exceptions.ProgrammingError:(1064,「你有一個錯誤在你的SQL語法中;檢查對應於你的MySQL服務器版本的手冊,在'{nombredb}'附近使用正確的語法(NOMBRE CHAR(20)NOT NULL,APELLIDO CHAR(20),EDAD INT,SEXO CHAR(1) ''在第1行) 。 –

+0

這意味着括號{}被包含在Python .format()替換之後的最後一個字符串中,並且它們不應該是。是否輸入了「nombredb」或「{nombredb}」在迴應raw_input?第一個(沒有大括號)是正確的。 – christutty

+0

它的工作原理,非常感謝! –

相關問題