我在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查询编写。
由于
答案 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 ))