2015-07-31 2 views
1

Как вставить html в mysql от Python?Python вставляет html в mysql?

sql_data = "INSERT INTO `index_table`.`tab_data` (`id`, `content`, `copyfrom`) VALUES (NULL, '%s','0')" 

HTML-код, который я хочу, чтобы вставить был как этот

<p><img src='http://img.domain.com/topic/image/20150731/db9475df317519db7622c25f23a42b0130700277.jpg' /></p> 

пайсы моего питона кода

content = "<p><img src='http://img.domain.com/topic/image/20150731/db9475df317519db7622c25f23a42b0130700277.jpg' /></p>" 
tx.execute(sql_data % (tx.commit(str(content)))) 

Но это не работает.

здесь больше кода Python

class MysqlPipeline(object): 
def __init__(self):        
    self.dbpool = adbapi.ConnectionPool('MySQLdb', 
      host = 'localhost', 
      db = 'index', 
      user = 'name', 
      passwd = 'pass', 
      cursorclass = MySQLdb.cursors.DictCursor, 
      charset = 'utf8', 
      use_unicode = False 
    ) 

# pipeline dafault function      
def process_item(self, item, spider): 
    query = self.dbpool.runInteraction(self._conditional_insert, item) 
    return item 


# insert the data to databases      
def _conditional_insert(self, tx, item): 
    now_data = str(time.strftime('%Y%m%d',time.localtime(time.time()))) 

    sql_data = ('INSERT INTO `index`.`news_data` (`id`, `content`, `maxcharperpage`, `allow_comment`) VALUES (LAST_INSERT_ID(), "%s", "10000", "1")') 
    try: 
     thumbname = item['images'][0]['path'] 
     title = str(item['title'][0]) 
     picid = item['catid'] 
     image_locals = "http://img.domain.com/topic/image/"+now_data+"/"+thumbname 
     #print maxid 
     localimgs = list() 
     for img in item['images']: 
      imgsrc = img['path'] 
      #localimg = str("<p><img src='http://img.domain.com/topic/image/"+now_data+"/"+imgsrc+"' /></p>").replace('full/','') 
      localimg = imgsrc 
      localimgs.append(localimg) 
     neirong = ''.join(localimgs)# neirong is a str object, html code. 
     print neirong 

     tx.execute(sql_data , [neirong]) # Is this line right? but it doesn't work 

    except MySQLdb.Error, e: 
     print "Error %d: %s" % (e.args[0], e.args[1]) 
    return item 

Может быть больше информации вы можете узнать

ответ

1

Допуская tx является объект курсора, передать content в качестве параметра вместо построения SQL самостоятельно. В противном случае вам следует подумать о том, чтобы процитировать. (Для предотвращения инъекций SQL)

sql_data = (
    "INSERT INTO `index_table`.`tab_data` (`id`, `content`, `copyfrom`) " 
    "VALUES (NULL, %s, '0')") 
content = "... html ..." 
tx.execute(sql_data, [content]) 
# connection_object.commit() 
+0

ОГО курсора объект, а не соединение –

+0

@jianbingMa, я удалил комментарий соответственно. – falsetru

+0

Ошибка 1064: У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с '>

Смежные вопросы