2016-06-22 3 views
1

Я использую MySQlDb для подключения и заполнения моей БД скриптом python. Данные из потока BGP (дампа) поступают в БД. Но когда я пытаюсь выполнить выполнить (вставить данные) с SQL на строку 65 в нижней части кода, DB не влияет, кроме того, что строка делает auto-increment на одном из своих полей. Это проблема кодирования? Я использую utf-8 в python и utf-8, utf8_swedish_ci в MySQL. Код, я использую:MySQLdb не заполняет строки в БД данными, но feildes автоматически увеличиваются

#!/usr/bin/env python 
# -*- coding: utf-8 -*- 
from _pybgpstream import BGPStream, BGPRecord, BGPElem 
from collections import defaultdict 
import time 
import datetime 
import os 
import MySQLdb 

db = MySQLdb.connect(user="bgpstream", host="localhost", passwd="Bgpstream9", db="bgpstream_copy") 
db_cursor = db.cursor() 

# Create a new bgpstream instance and a reusable bgprecord instance 
stream = BGPStream()  
rec = BGPRecord() 

# Consider Route Views origon only 
collector_name = 'rrc11' 
stream.add_filter('collector',collector_name) #maybe we want route-views4? 

t_end = int(time.time()) #current time now 
t_start = t_end-3600 #the time interval (duration) we are getting from collecor, e.i 60*60 = 3600s = 1 hour 
stream.add_interval_filter(t_start,t_end) 
print "Total duration " + str(t_end-t_start) + " sec" 

# Start the stream 
stream.start() 

### Insert loop ### 
# This loop insert new records and tries not to over count the records 
# Get next record: 
while(stream.get_next_record(rec)): 
    # Print the record information only if it is not a valid record 
    if rec.status != "valid": 
     print rec.project, rec.collector, rec.type, rec.time, rec.status 
    else: 

     # Skip if rib 
     if rec.type == "rib": 
      continue 

     #get affected rows from insert 
     affected_rows = db.affected_rows() 

     # Skip if dulpicate record 
     if affected_rows <= 0: 
      continue 

     # Extract insert id of last inserted bgp record 
     last_record_id = db.insert_id() 

     print last_record_id 

     # Traverse elements 
     elem = rec.get_next_elem() 
     while(elem): 

      print last_record_id 

      ## Dette bør kaste en exeption 
      if elem == None: 
       continue 

      # Insert element 
      db_cursor.execute(
      """INSERT INTO bgp_elements 
      (record_id_owner, element_time, peer_address, peer_asn) 
      VALUES 
      (
      '"""+str(last_record_id)+"""', 
      '"""+str(elem.time)+"""', 
      '"""+str(elem.peer_address)+"""', 
      '"""+str(elem.peer_asn)+"""' 
      ) 
      """)    
      elem = rec.get_next_elem() 

ответ

0

У меня нет опыта работы с DB в python, но может быть, что вы должны запустить db.commit() после запуска функции cursor.execute().

+0

Я изменил пакет; mysql.connector. Теперь БД заполняется так, как должно. Однако после выполнения карьера необходимо было выполнить фиксацию объекта БД. Благодарю. –

0

Проверьте правильность last_record_id, которые могут быть переданы как не числом, MySQL будет отклонять, то же са element_time.

+0

Я печатаю last_record_id в строке 52. Это добавочное число (автоинкремент из БД) –

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

  • Нет связанных вопросов^_^