这个python sql语句有什么问题

时间:2013-04-18 05:33:37

标签: python mysql

我在mysql中有一个DB模式

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)

我正在尝试使用以下查询在数据库中插入值

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

PLease帮助我如何解决这个问题。我在Django ORM上工作了很多但是为此我必须用Mysql查询编写。

由于

1 个答案:

答案 0 :(得分: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 ))