使用python在mysql数据库中插入值

时间:2013-04-16 13:46:33

标签: python sql string-formatting

这是我的Mysql表架构

表:预订 列:

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)

我正在尝试使用python插入值.so这里我做了什么

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','%d','%d','%s','%d','%s' )"   %  (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)  
x.execute(sql)

但在执行上述脚本时,我收到错误。

    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','%d','%d','%s','%d','%s' )"   %  (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)  
TypeError: %d format: a number is required, not NoneType

我认为我的字符串格式化程序不正确请帮助我。

1 个答案:

答案 0 :(得分:0)

它看起来像booking_date,notes,source_id,(你也在插入注释值2x?) 是None。您可以在插入之前检查/验证每个值。

另请使用参数化查询,而不是字符串格式

  

通常,您的SQL操作需要使用Python中的值   变量。您不应该使用Python的字符串汇编查询   因为这样做是不安全的;它使你的程序   容易受到SQL注入攻击(请参阅http://xkcd.com/327/)   什么可能出错的幽默例子。)

     

相反,请使用DB-API的参数替换。放?作为一个   占位符,无论您想要使用哪个值,然后提供元组   value作为游标的execute()方法的第二个参数。

类似的东西:

x.execute("INSERT INTO thing (test_one, test_two) VALUES (?, ?)", (python_var_one, python_var_two,))