0

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)

次のクエリを使用して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

これを解決するにはどうすればよいか教えてください。

ありがとう

4

1 に答える 1

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

ここでは 3 つあることがわかります%sが、2 つの文字列しか渡していません('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 ))
于 2013-04-18T05:54:16.513 に答える