コード例 #1
0
ファイル: mysql_demo.py プロジェクト: Lidoudou96/guest
from pymysql import cursors, connect

#连接数据库
conn = connect(host='127.0.0.1',
               user='******',
               password='******',
               db='guest',
               charset='utf8mb4',
               cursorclass=cursors.DictCursor)
try:
    with conn.cursor() as cursors:
        sql = 'INSERT INTO sign_guest (realname,phone,email,sign,event_id,creat_time) VALUES ("tom",18800110022,"*****@*****.**",0,1,NOW());'
    cursors.execute(sql)
    #提交事务
    conn.commit()

    with conn.cursor() as cursors:
        sql = "SELECT realname,phone,email,sign FROM sign_guest WHERE phone=%s"
    cursors.execute(sql, ('18800110022'))
    result = cursors.fetchone()
    print(result)
finally:
    conn.close()
コード例 #2
0
                       str(row[2]))
        queriesBackbone = (
            "SELECT  name,Sequence from GNPNDB.backbone where backboneID in (SELECT BackboneID from GNPNDB.NewPlasmidID Where PlasmidID =(SELECT DISTINCT(PlasmidID) From GNPNDB.Cassette WHERE PlasmidID="
            + str(row[4]) + "))")

        queriesResist = (
            "SELECT  Name,Sequence from GNPNDB.Resist where ResistID in (SELECT ResistanceID from GNPNDB.NewPlasmidID Where PlasmidID =(SELECT DISTINCT(PlasmidID) From GNPNDB.Cassette WHERE PlasmidID="
            + str(row[4]) + "))")
        cursors.execute(queriesProm)
        cursorsFour = db.cursor()
        cursorsFour.execute(queriesBackbone)
        cursorsFive = db.cursor()
        cursorsFive.execute(queriesResist)
        rowsFive = cursorsFive.fetchone()

        rows = cursors.fetchone()
        while rows:
            rowsLen = len(str(rows[1]))
            feature = SeqFeature(FeatureLocation(start=spot,
                                                 end=spot + rowsLen),
                                 type='Promoter',
                                 qualifiers={'locus_tag': rows[0]})
            print rowsLen
            record.features.append(feature)
            spot = spot + rowsLen
            fullSeqs = fullSeqs + str(rows[1])
            rows = cursors.fetchone()
            print spot
            cursorsTwo = db.cursor()
            cursorsTwo.execute(queriesGene)
コード例 #3
0
def get_product_info(big_list, mid_list, small_list):
    '''
  category_list : list(String). 해당 상품의 중/소/카테고리 --> 어디서 필요한지..?
  /name : String. 상품 이름
  /number : String. 상품 고유번호
  /brand : String. 브랜드 이름
  /img : String (src). 대표 이미지 -> 복수 개일 수 있으므로 변경 필요 
  /product_img_list : list(String). 대표 이미지들의 리스트
  /item_img_list : list(String). 상품 설명 본문 이미지들의 리스트
  /rate : String. 평점
  /review_count : String (**건) 상품의 리뷰 개수
  /is_discount : boolean. 할인 여부
  /origin_price : String (**원). 정상가
  /discount_price : String (**원). 할인 가격
  옵션이 없는 단일 상품의 경우, 옵션 개수를 0개로 할 것인가 1개로 할 것인가
  그리고 옵션 이름 목록과 가격에 그냥 name과 price를 넣어야 하나?
  품절의 경우 옵션 가격은 얼마?
  /option_lists : 옵션 품절 여부 (Y : 품절,  N : 품절 아님)
  /option_count : String. 옵션 개수
  /option_name_list : list(String). 옵션별 이름
  /option_price_list : list(String). 옵션별 가격

  '''
    search_category = big_list + ' ' + mid_list + ' ' + small_list
    print(search_category)

    for category_id, cat_name in lv_list.items(
    ):  #lv_list 아이템을 하나씩 접근해서, key, value를 각각 category_id, cat_name에 저장
        if category_id == search_category:
            print(cat_name)

    sleep(2.0)
    print(big_list, mid_list, small_list)
    product_img_list = []
    option_name_list = []
    option_price_list = []
    sold_out = 0
    option_count = 0

    ##  name, number, brand  가져오기
    name = (driver.find_element_by_class_name('prd-name')).text
    number = driver.find_element_by_xpath('/html/head/meta[16]').get_attribute(
        'content')
    brand = (driver.find_element_by_class_name('category')).text
    img = (driver.find_element_by_css_selector('#prdImgSwiper > div > img')
           ).get_attribute('src')

    ## product_img_list
    product_imgs = driver.find_elements_by_css_selector(
        '#prdImgSwiper > div > img')
    product_img_list = [img.get_attribute('src') for img in product_imgs]

    ## item_img_list
    item_imgs = (driver.find_elements_by_css_selector('#prdDtlTabImg img'))
    item_img_list = [itm_img.get_attribute('src') for itm_img in item_imgs]

    # rate & review_count
    width = (driver.find_element_by_class_name('tit-area .inner')
             ).get_attribute('style')
    re_width = re.split(' |%', width)
    rate = width_to_rate(re_width[1])

    org_review_count = driver.find_element_by_class_name('tit-area .num').text
    review_re = org_review_count.replace('(', ')')
    review_count = review_re.replace(')', '')

    ## is_discount ~ discount_price
    discount_price = ((driver.find_element_by_class_name('price-last')
                       ).text.split('원')[0]).replace(',', '')
    origin_price = ((driver.find_element_by_class_name('price-dis')
                     ).text.split('원')[0]).replace(',', '')

    # 할인 X -> price-dis 값 : ''
    if origin_price == '':
        origin_price = discount_price
        is_discount = False
    # 할인 O
    else:
        is_discount = True

    # option_count ~ 끝까지
    try:
        # .top-option을 클릭해야 .optSelectMode 인지 바로 optEditMode인지 확인가능 --> 옵션 선택시 optEditMode로 넘어감
        driver.find_element_by_class_name('top-option').click()
        try:
            # 옵션이 많으면 optSelectMode // 단일 옵션인 경우 opt-only-one 라는 클래스가 있음, optEditMode (except로 넘어감)
            driver.find_element_by_class_name('optSelectMode')

            options_name = driver.find_elements_by_class_name(
                'prd-item > .txt')
            options_price = driver.find_elements_by_class_name(
                'prd-item > .right > .font-num-bold')

            option_name_list = [
                name.get_attribute('textContent') for name in options_name
            ]
            option_price_list = [
                price.get_attribute('textContent') for price in options_price
            ]

            option_count = len(option_name_list)

            print(option_name_list)

            # 옵션 품절 여부 확인
            option_list = driver.find_elements_by_css_selector(
                '.option-list li')
            option_lists = is_product_sold_out(option_list)

        except:
            # 단일 옵션인 경우 , option_count = 1
            option_name = (driver.find_element_by_class_name(
                'option-view > .name')).get_attribute('textContent')
            option_price = ((driver.find_element_by_class_name(
                'option-view > .price-area > .font-num')
                             ).get_attribute('textContent')).replace(',', '')

            option_name_list.append(option_name)
            option_price_list.append(option_price)

            option_count = 1
    except:
        # 제품 자체 품절 -> top-option.click 불가능 --> option관련 정보 제외하고는 다 가져가야함
        sold_out = 1

        ##  name, number, brand  가져오기
        name = (driver.find_element_by_class_name('prd-name')).text
        number = driver.find_element_by_xpath(
            '/html/head/meta[16]').get_attribute('content')
        brand = (driver.find_element_by_class_name('category')).text
        img = (driver.find_element_by_css_selector('#prdImgSwiper > div > img')
               ).get_attribute('src')

    cursors.execute("select brand_id from Brand where brand_name = '" + brand +
                    "';")
    brand_id = cursors.fetchone()
    print(type(brand_id[0]))
    print(brand_id[0])

    driver.back()  # 뒤로가기
    sleep(0.5)
コード例 #4
0
def get_product_info(big_list, mid_list, small_list):
  '''
  category_list : list(String). 해당 상품의 중/소/카테고리 --> 어디서 필요한지..?
  /name : String. 상품 이름
  /number : String. 상품 고유번호
  /brand : String. 브랜드 이름
  /img : String (src). 대표 이미지 -> 복수 개일 수 있으므로 변경 필요 
  /product_img_list : list(String). 대표 이미지들의 리스트
  /item_img_list : list(String). 상품 설명 본문 이미지들의 리스트
  /rate : String. 평점
  /review_count : String (**건) 상품의 리뷰 개수
  /is_discount : boolean. 할인 여부
  /origin_price : String (**원). 정상가
  /discount_price : String (**원). 할인 가격
  옵션이 없는 단일 상품의 경우, 옵션 개수를 0개로 할 것인가 1개로 할 것인가
  그리고 옵션 이름 목록과 가격에 그냥 name과 price를 넣어야 하나?
  품절의 경우 옵션 가격은 얼마?
  /option_lists : 옵션 품절 여부 (Y : 품절,  N : 품절 아님)
  /option_count : String. 옵션 개수
  /option_name_list : list(String). 옵션별 이름
  /option_price_list : list(String). 옵션별 가격

  '''
  category_list = big_list+ ' '+ mid_list + ' '+ small_list

  sleep(1.0)
  print(category_list)

  product_img_list = []
  option_name_list = []
  option_price_list = []
  sold_out = 0
  option_count = 0 
 
  ##  name, number, brand  가져오기
  name = (driver.find_element_by_class_name('prd-name')).text
  number = driver.find_element_by_xpath('/html/head/meta[16]').get_attribute('content')
  brand = (driver.find_element_by_class_name('category')).text
  img = (driver.find_element_by_css_selector('#prdImgSwiper > div > img')).get_attribute('src')


  
  ## product_img_list 
  product_imgs = driver.find_elements_by_css_selector('#prdImgSwiper > div > img')
  product_img_list = [img.get_attribute('src') for img in product_imgs]

  ## item_img_list 
  item_imgs = (driver.find_elements_by_css_selector('#prdDtlTabImg img'))
  item_img_list = [itm_img.get_attribute('src') for itm_img in item_imgs]

  # rate & review_count 
  # Review 부분은 다음에 구현 (어떻게 얻어오는지만 이해하기)
  width = (driver.find_element_by_class_name('tit-area .inner')).get_attribute('style')
  re_width = re.split(' |%',width)
  rate = width_to_rate(re_width[1])
  
  org_review_count = driver.find_element_by_class_name('tit-area .num').text
  review_re = org_review_count.replace('(',')')
  review_count = review_re.replace(')','')

  ## is_discount ~ discount_price 
  discount_price = ((driver.find_element_by_class_name('price-last')).text.split('원')[0]).replace(',','')
  origin_price = ((driver.find_element_by_class_name('price-dis')).text.split('원')[0]).replace(',','')
  
  
  # 할인 X -> price-dis 값 : ''
  if origin_price == '': 
    origin_price  = discount_price
    is_discount = False
  # 할인 O 
  else :
    is_discount = True 

  # option_count ~ 끝까지
  try:
    # .top-option을 클릭해야 .optSelectMode 인지 바로 optEditMode인지 확인가능 --> 옵션 선택시 optEditMode로 넘어감
    driver.find_element_by_class_name('top-option').click()
    try:
      # 옵션이 많으면 optSelectMode // 단일 옵션인 경우 opt-only-one 라는 클래스가 있음, optEditMode (except로 넘어감)
      driver.find_element_by_class_name('optSelectMode')

      options_name = driver.find_elements_by_class_name('prd-item > .txt')
      options_price = driver.find_elements_by_class_name('prd-item > .right > .font-num-bold')

      option_name_list = [name.get_attribute('textContent') for name in options_name]
      option_price_list = [price.get_attribute('textContent') for price in options_price]

      option_count = len(option_name_list)

      print(option_name_list)

      # 옵션 품절 여부 확인
      option_list = driver.find_elements_by_css_selector('.option-list li')
      option_lists = is_product_sold_out(option_list) 

    except:
      # 단일 옵션인 경우 , option_count = 1
      option_name = (driver.find_element_by_class_name('option-view > .name')).get_attribute('textContent')
      option_price = ((driver.find_element_by_class_name('option-view > .price-area > .font-num')).get_attribute('textContent')).replace(',','')

      option_name_list.append(option_name)
      option_price_list.append(option_price)
    
      option_count = 1
  except:
    # 제품 자체 품절 -> top-option.click 불가능 --> option관련 정보 제외하고는 다 가져가야함
    sold_out = 1 
    
  

  # json data
  data["category_list"] = category_list
  data["name"] = name
  data["number"] = number
  data["brand"] = brand
  data["img"] = img
  data["item_img_list"] = item_img_list
  data["rate"] = rate
  data["review_count"] = review_count
  data["is_discount"] = is_discount
  data["origin_price"] = origin_price
  data["discount_price"] = discount_price
  data["option_count"] = option_count
  data["option_name_list"] = option_name_list
  data["option_price_list"] = option_price_list

  try:
    with open(
      './data/{0}/{1}/{2}/{3}.json'.format(big_list, mid_list, small_list, number), 
      'w', encoding='utf-8') as f:
      json.dump(data, f, ensure_ascii=False, indent="\t")
  except: # 디렉터리가 없을 때만 디렉터리를 만듦
    os.makedirs('./data/{0}/{1}/{2}'.format(big_list, mid_list, small_list))

  search_category = big_list + ' ' + mid_list + ' ' + small_list
  sql_cat_name = ''
  for category_id, cat_name in lv_list.items(): #lv_list 아이템을 하나씩 접근해서, key, value를 각각 category_id, cat_name에 저장
    if category_id == search_category:
      sql_cat_name = cat_name
      # print (cat_name)
    
  # sql문 생성 + insert
  sqls = []
  sqls.append("insert into Discount(is_discount, discount_price) \
  values ('%s', %d);" % (is_discount_product(int(discount_price), int(origin_price)), int(discount_price)))


  # select문 사용해서 brand.name을 찾아서 brand_id 값 받아와서 item_brand_id 에 넣는 로직
  # cursors.fetchone()은 결과 값을 tuple 형태로 반환 -> brand_id_tuple[0] 이 우리가 필요한 실제 값 --> int 타입이기 떄문에 형변환 필요 X
  cursors.execute("select brand_id from Brand where brand_name = '"+brand+"';")
  brand_id_tuple = cursors.fetchone()
  brand_id = brand_id_tuple[0]

  # item.category_name
  for i in range(len(item_img_list)):
    sqls.append("insert into Item_img(item_img, item_order) \
      values('%s', %d);" % ( item_img_list[i], i + 1))

  # 제품 자체가 품절인지 확인하는 로직 필요
  if sold_out == 0 :
    sqls.append("insert into Item(item_name, item_brand_id, item_img, item_price, category_name, is_optional, barcode, buy, item_no, is_soldout) \
      values ('%s', %d, '%s', %d, '%s', '%s', %d, %d, '%s','%s');" % (name, brand_id, img, int(discount_price), sql_cat_name, is_optional_product(option_count), 1, 1, number, 'N'))
  else:
    sqls.append("insert into Item(item_name, item_brand_id, item_img, item_price, category_name, is_optional, barcode, buy, item_no, is_soldout) \
      values ('%s', %d, '%s', %d, '%s', '%s', %d, %d, '%s','%s');" % (name, brand_id, img, int(discount_price), sql_cat_name, is_optional_product(option_count), 1, 1, number, 'N'))
  

  # 품절인지 알아내는 로직이 필요
  m = 0
  if is_optional_product(option_count) == 'Y':
    # 단일 옵션인지 확인
    if option_count != 1:         
      for m in range(option_count):
        if option_lists[m] == 'Y':
          sqls.append("insert into Item_option(item_no, item_option_name, is_soldout) \
            values('%s', '%s', '%s');" %(number, option_name_list[m],'Y'))
        else:
          sqls.append("insert into Item_option(item_no, item_option_name, is_soldout) \
            values('%s', '%s', '%s');" %(number, option_name_list[m],'N'))
    else: # 단일 옵션인 경우
      sqls.append("insert into Item_option(item_no, item_option_name, is_soldout) \
        values('%s', '%s', '%s');" %(number, option_name_list[m],'N'))


  for i in range(len(item_img_list)):
    sqls.append("insert into Item_img(item_no, item_img, item_order) \
      values('%s', '%s', %d);" % (number, item_img_list[i], i + 1))
      
  # 본문 이미지
  for l in range(len(product_img_list)):
    sqls.append("insert into Product_img(item_no, product_img) \
      values('%s', '%s');" % (number, product_img_list[l]))

  # 카테고리 대, 중, 소 넘기기
  # sqls.append("insert into Category_detail(category_one, category_two, category_three) \
  #   valus('%s', '%s', '%s');" %(big_list, mid_list, small_list))

  f = open("sql.txt",'a')
  for i in sqls:
    f.write(i)
    f.write('\n')

  execute_sql(sqls)

  driver.back() # 뒤로가기
  sleep(1.0)