2013-04-18 47 views
0

我有MySQL中的數據庫架構哪些錯誤與這條巨蟒的SQL語句

id int(11) PK AI 
apt_id varchar(200) 
checkin_date date 
checkout_date date 
price decimal(10,0) 
deposit decimal(10,0) 
adults int(11) 
source_id int(11) 
confirmationCode varchar(100) 
client_id int(11) 
booking_date datetime 
note mediumtext 
Related Tables:property (apt_id → apt_id) 
booking_source (source_id → id) 

我試圖用插入在DB值以下查詢

self.start_at = datetime.strptime(self.start_at[0:10] + ' ' + self.start_at[11:19], "%Y-%m-%d %H:%M:%S") 
self.end_at = datetime.strptime(self.end_at[0:10] + ' ' + self.end_at[11:19], "%Y-%m-%d %H:%M:%S") 
x = db.cursor() 
sql = """INSERT INTO `nycaptBS`.`booking` (`apt_id`, `checkin_date`, `checkout_date`, `price`,`deposite` `adults`, `source_id`, `confirmationCode`, `client_id`, `booking_date`) VALUES ('%s','%s','%s','%s','%s','%s','%s','%s','%s','%s')""" 
x.execute(sql,(self.apt_id,self.start_at,self.end_at,self.final_price,self.deposit,self.adults,self.source_id,self.notes,self.client_id,self.booking_date,self.notes)) 

由於錯誤本身是不明確

File "/usr/lib/python2.7/dist-packages/MySQLdb/cursors.py", line 159, in execute 
    query = query % db.literal(args) 
TypeError: not enough arguments for format string 

請幫我解決這個問題。我在Django ORM上工作了很多,但是爲此我必須在Mysql查詢中編寫代碼。

感謝

+0

在'x.execute'你只提供四個參數,而不是10,你在查詢 – 2013-04-18 05:36:14

+0

等待我會更新我的問題 – burning 2013-04-18 05:40:24

+0

仍然設置了10個佔位符,但傳遞了11個值 – 2013-04-18 05:53:14

回答

1

當你在傳入您的字符串更多的格式代碼,並沒有足夠的論據,引發此異常:

>>> s = "Hello %s %s %s" 
>>> print(s % ('a','b')) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: not enough arguments for format string 

這裏你可以看到我有三個%s,但我只是路過在兩個字符串('a','b')

你必須與你的查詢同樣的問題,因爲你缺少一個逗號:

sql = """ 
    INSERT INTO `nycaptBS`.`booking` (
      `apt_id`, 
      `checkin_date`, 
      `checkout_date`, 
      `price`, 
      `deposite` `adults`, # missing comma here 
      `source_id`, 
      `confirmationCode`, 
      `client_id`, 
      `booking_date`) VALUES (
         '%s', #1 
         '%s', #2 
         '%s', #3 
         '%s', #4 
         '%s', #5 
         '%s', #6 
         '%s', #7 
         '%s', #8 
         '%s', #9 
         '%s' #10 
      ) 
     """ 
x.execute(sql,(
self.apt_id, #1 
self.start_at, #2 
self.end_at, #3 
self.final_price, #4 
self.deposit, #5 
self.adults, #6 
self.source_id, #7 
self.notes, #8 
self.client_id, #9 
self.booking_date, #10 
self.notes #11)) 
+0

Khalid你是ritgh我錯過了逗號感謝,但之後,我得到這個錯誤_mysql_exceptions.ProgrammingError:(1064,「你有一個錯誤在你的SQL語法;檢查手冊,對應於你的MySQL服務器版本的正確的語法在'2013-04-11 16:00:00'附近使用,\ n – burning 2013-04-18 06:35:46

+0

這是因爲你的數據庫類型是'DATE',但你傳入的日期和時間是字符串 – 2013-04-18 06:39:28

+0

start_at和end_at是python日期對象您可以檢查問題,然後y – burning 2013-04-18 07:12:47