ªð¦^¦Cªí ¤W¤@¥DÃD µo©«

python ¿Ä¸ê¿Ä¨é·JÁ` (¥þ³¡)"¸ê®Æ

¦^´_ 19# c_c_lai

³o¦¸¬O¥HSQLite3 ¸ê®Æ®w¼g¦¨ªº¡A¨ä¥Îªk¡A©M ADODB¦³¨Ç³\ªº®t²§¡A¦]SQLite3¡A¬Opython ¤º«Ø¨ç¼Æ¡A©Ò¥H¤£¥Î¥t¸Ë
¨ä¤¤¦b¸ê®ÆÂ^¨ú¤è­±¡A¦]Â^¨ú¤U¨Óªº¸ê®Æ¡A¦³ªÅ¥Õ ¥H¤Î ¤d¤À¦ì²Å¸¹ "," ­Y¤£³B²z³o¨Ç¡Apython ·|²£¥Í³\¦h¿ù»~¡A³o¨Ç°ÝÃD¤]¤w³B²z
  1. #-*- coding:utf-8 -*-



  2. import requests
  3. from bs4 import BeautifulSoup
  4. import random
  5. import os
  6. import sqlite3
  7. import datetime
  8. import time

  9. # ÀH¾÷§ó§ï headers
  10. def head_random():
  11.       for i in range(10):
  12.             hs = ['Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36',
  13.                    'Mozilla/5.0 (iPhone; U; CPU iPhone OS 3_0 like Mac OS X; en-us) AppleWebKit/528.18 (KHTML, like Gecko) Version/4.0 Mobile/7A341 Safari/528.16',
  14.                    'Mozilla/5.0 (Linux; U; Android 4.1.2; zh-tw; GT-I9300 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30',
  15.                    'Mozilla/5.0 (iPad; U; CPU OS 3_2 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B334b Safari/531.21.10'
  16.                    'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0)']
  17.             hes = {"User-Agent":random.choice(hs)}
  18.       return hes

  19. # ¶°¥xÃҩҿĸê¿Ä¨é¾lÃB¥þ³¡¸ê®Æ
  20. def read_network_data(date,from_number):
  21.       url = 'http://www.twse.com.tw/ch/trading/exchange/MI_MARGN/MI_MARGN.php'
  22.       head =head_random()
  23.       payload = {"download":'',
  24.                  "qdate":date,
  25.                  "selectType":"ALL"}
  26.       res = requests.post(url, headers=head, data=payload)
  27.       soup=BeautifulSoup(res.text, "lxml")
  28.       tab = soup.select('tbody')[from_number] # 2­Óªí®æ¤§2
  29.       regs=[] # ªì©l°}¦C
  30.    
  31.       for i in range(len(tab.select('tr')[0].select('td'))): # ©w¸q2ºû°}¦Cºû«×
  32.             regs.append([])
  33.       n=0
  34.       for tr in tab.select('tr'): #Â^¨úªí®æ¸ê®Æ
  35.             for i in range(len(tab.select('tr')[0].select('td'))):
  36.                   if n==0 or n==1 or n==15:      #§â¤å¦r¦ê¤¤ªºªÅ¥Õ¤å¦r¥h°£±¼
  37.                         strs=tr.select('td')[i].text
  38.                         strs=str(strs.replace(' ',''))
  39.                         regs[i].append(strs)
  40.                   else:    # §â¼Æ¦r¤¤ªº¤d¤À²Å¸¹ "," ¥h°£±¼
  41.                         ints=tr.select('td')[i].text
  42.                         ints=str(ints.replace(',',''))
  43.                         regs[i].append(ints)
  44.                   n +=1
  45.             n=0
  46.       return regs


  47. def check_db_exists(regs):
  48.       if not os.path.exists('twsedata.db'):   # Àˬdtwsedata.db¬O§_¦s¦b(©M¦¹µ{¦¡½X¬Û¦Pªº¸ê®Æ§¨)
  49.             conn = sqlite3.connect('twsedata.db')  # ¦pªG¨S¦³¡A´N«Ø¥ß¤@­ÓªÅ¥Õ¸ê®Æ®w¡A(sqlite3.connect) ¤]¬O³sµ²»y¥y¡A¦³¸ê®Æ®w´N³sµ²¡A¨S¦³´N«Ø¥ß
  50.             sql = "CREATE TABLE ªÑ²¼(ªÑ²¼¥N¸¹  char(10) PRIMARY KEY,ªÑ²¼¦WºÙ  char(20));"
  51.             conn.execute(sql) #¦b·s¸ê®Æ®w«Ø¥ßªÅ¥Õ¸ê®Æªí (ªÑ²¼)
  52.             sql = "CREATE TABLE  ¿Ä¸ê¿Ä¨é«H¥Î¥æ©ö²Î­p( \
  53.                                                         ¤é´Á  datetime, \
  54.                                                         ¶µ¥Ø  char(20), \
  55.                                                         ¶R¶i INTEGER, \
  56.                                                         ¶R¥X INTEGER, \
  57.                                                         ²{ª÷¡]¨é¡^ÀvÁÙ INTEGER, \
  58.                                                         «e¤é¾lÃB INTEGER, \
  59.                                                         ¤µ¤é¾lÃB INTEGER);"
  60.             conn.execute(sql) #¦b·s¸ê®Æ«Ø¥ß ªÅ¥Õ¸ê®Æªí(¿Ä¸ê¿Ä¨é«H¥Î¥æ©ö²Î­p)
  61.             conn.commit() # Àx¦s
  62.             conn.close() #Ãö³¬
  63.             
  64.       n=0
  65.       conn = sqlite3.connect('twsedata.db') # conn©M¤W¤@­Ó if ..¤¤ªº conn¬O¤£¤@¼Ëªº ¡A¤W¤@­Ó¬O¨S¦³¸ê®Æ®w®É¤~§@¥Î¡A¬°§½³¡ÅܼƦӦ¹³B¡A«h¬°¥H¤U¨Ï¥Îªº¥þ§½ÅܼÆ
  66.       for i in regs[0]:  #¥Hª¦¦^¨Óªº¸ê®Æ°}¦Cªº²Ä¤@¦C¬°°j°é
  67.             try:      #¥ý¹Á¸Õ¬d¸ß i Åܼƪº¸ê®Æªí¬O§_¦s¦b¡A­Y¬O¤£¦s¦b·|µo¥X Exception ªº¿ù»~°T®§
  68.                   c = conn.cursor()
  69.                   sql = "select * from [" + i + "]"
  70.                   c.execute(sql) # table does not exist
  71.                   c.close()
  72.             except Exception as e:  #·ítry µo¥X¿ù»~°T®§(¤]´N¬OŪ¤£¨ì  i ¸ê®Æªí)¡A¦¹®É«Ø¥ß¤@­Ó i ¸ê®Æªí
  73.                   c = conn.cursor()
  74.                   sql="CREATE TABLE [" + i + "](¤é´Á  DATETIME PRIMARY KEY, \
  75.                                                                               ¸ê¶R¶i  INTEGER, \
  76.                                                                               ¸ê½æ¥X INTEGER, \
  77.                                                                               ¸ê²{ª÷ÀvÁÙ INTEGER, \
  78.                                                                               ¸ê«e¤é¾lÃB INTEGER, \
  79.                                                                               ¸ê¤µ¤é¾lÃB INTEGER, \
  80.                                                                               ¸ê­­ÃB INTEGER, \
  81.                                                                               ¨é¶R¶i  INTEGER, \
  82.                                                                               ¨é½æ¥X INTEGER, \
  83.                                                                               ¨é²{ª÷ÀvÁÙ INTEGER, \
  84.                                                                               ¨é«e¤é¾lÃB INTEGER, \
  85.                                                                               ¨é¤µ¤é¾lÃB INTEGER, \
  86.                                                                               ¨é­­ÃB INTEGER, \
  87.                                                                               ¸ê¨é¤¬©è INTEGER, \
  88.                                                                               µù°O char(5));"
  89.                   c.execute(sql) #«Ø¥ß i ¸ê®Æªí
  90.                   sql="INSERT INTO ªÑ²¼(ªÑ²¼¥N¸¹, ªÑ²¼¦WºÙ) \
  91.                   VALUES ('" + regs[0][n] + "','" + regs[1][n] + "');"
  92.                   c.execute(sql)  # ¦bªÑ²¼¸ê®Æªí¤¤¼g¤JªÑ²¼¥N¸¹¡BªÑ²¼¦WºÙ
  93.                   c.close() # Ãö³¬ c ª«¥ó
  94.             n += 1
  95.       conn.commit()
  96.       conn.close()
  97. def add_data(regs,date):
  98.       conn = sqlite3.connect('twsedata.db')
  99.       for i in range(len(regs[0])):
  100.             try: #Àˬd¬Y¤é´Á¬O§_¦s¦b©ó¸ê®Æªí¤¤¡A·í¬Y¤é´Á¦s¦b®É¡A¸õÂ÷³o¦¸ªº´`Àô¡A³o¸Ì«üªº¶È¬O³o¦¸¡A¤£¬O¸õÂ÷ for
  101.                   c = conn.cursor()
  102.                   sql="SELECT * FROM [" + regs[0][i] + "] WHERE ¤é´Á = '" + date + "';"
  103.                   c.execute(sql)
  104.                   c.close()
  105.             except Exception as e: #·í¤é´Á¤£¦s¦b®É¡A¼g¤J¸ê®Æ¨ì¸ê®Æªí¤¤
  106.                   c = conn.cursor()
  107.                   # ¤é´Á®æ¦¡¡A¦bsqlite3¤¤¡A¬O¥H¤å¦r«¬ºA¦s¤J¡AÁöµM¦³´£¨ÑDATETIME¡A¦ý«D¥H¤é´Á«¬ºA¦s¤J¡A¤é«á´£¥X¡A¶â¡I»Ý¦A°Ñ¾\sqlite3ªº¤é´Á³B²z
  108.                   
  109.                   sql="INSERT INTO [" + regs[0][i] + "](¤é´Á,¸ê¶R¶i,¸ê½æ¥X,¸ê²{ª÷ÀvÁÙ,¸ê«e¤é¾lÃB, \
  110.                                                                                          ¸ê¤µ¤é¾lÃB,¸ê­­ÃB,¨é¶R¶i,¨é½æ¥X,¨é²{ª÷ÀvÁÙ, \
  111.                                                                                          ¨é«e¤é¾lÃB,¨é¤µ¤é¾lÃB,¨é­­ÃB,¸ê¨é¤¬©è,µù°O) \
  112.                                                                        VALUES('" + date + "'," + regs[2][i] + "," + regs[3][i] + ", \
  113.                                                                                           " + regs[4][i] + ",  " + regs[5][i] + "," + regs[6][i] + ", \
  114.                                                                                           " + regs[7][i] + "," + regs[8][i] + ",  " + regs[9][i] + ", \
  115.                                                                                           " + regs[10][i] + "," + regs[11][i] + "," + regs[12][i] + ", \
  116.                                                                                           " + regs[13][i] + "," + regs[14][i]+ ",'" + regs[15][i] + "') ;"
  117.                   c.execute(sql)
  118.                   c.close()
  119.             else:
  120.                    break
  121.       conn.commit()
  122.       conn.close()

  123. # ¥H¤U¬°µ{¦¡ªº±Ò©lÂI¡G
  124. StartDate=input('½Ð¿é¤J¶}©lÂ^¨ú¤é´Á(¦è¤¸¤é´Á¦p¡G2016/1/1)¡G')
  125. EndDate=input('½Ð¿é¤Jµ²§ôÂ^¨ú¤é´Á(¦è¤¸¤é´Á¦p¡G2016/1/31)¡G')
  126. #³B²z¤é´ÁÁÙ¯uªº«Ü³Â·Ð
  127. ts=time.time()
  128. StartDate = time.strptime(StartDate, "%Y/%m/%d")
  129. EndDate =time.strptime(EndDate, "%Y/%m/%d")
  130. StartDate = datetime.date(StartDate[0], StartDate[1], StartDate[2])
  131. EndDate =  datetime.date(EndDate[0], EndDate[1], EndDate[2])
  132. RangeDate = datetime.timedelta(days = 1)
  133. while StartDate <= EndDate:
  134.       yy,mm,dd=str(StartDate).split('-')
  135.       dat=datetime.datetime(int(yy), int(mm), int(dd))
  136.       dd=dat.strftime('%Y/%m/%d')
  137.       year=str(int(dd[0:4])-1911)
  138.       date=dd.replace(dd[0:4], year)
  139.       print('¥Ø«e°õ¦æºô¸ôÂ^¨ú',date ,'¤éªº¸ê®Æ¡A½Ðµy«á...')
  140.       re=read_network_data(date,1)
  141.       if re[0][0]=='¬dµL¸ê®Æ':
  142.             print(date,'¤é¡A¥i¯à¬°¥ð¥«¤é¡A¬dµL¸ê®Æ¡C')
  143.             StartDate = StartDate + RangeDate
  144.             continue
  145.       print('Àˬd¬O§_¦³·sªÑ²¼¥[¤J¡A½Ðµy«á...')
  146.       check_db_exists(regs=re)
  147.       print('±N¸ê®Æ¼g¤J¸ê®Æ®w¤¤¡A½Ðµy«á...')
  148.       add_data(regs=re,date=dd)
  149.       StartDate = StartDate + RangeDate
  150.       te = time.time()
  151.       print('ºI¦Ü¥Ø«e¡A®É¶¡¤w¯Ó¶O¡G', int(te - ts),'¬í')

  152. print('°õ¦æ§¹²¦¡I')
½Æ»s¥N½X

TOP

¥»©«³Ì«á¥Ñ lpk187 ©ó 2016-9-29 09:33 ½s¿è

¦^´_ 30# c_c_lai

­è´ú¸Õ¤F¤@¤U¡A¦bJupyther Notebook ¤W°õ¦æ¡C
°õ¦æ«á¨S¿ù»~²£¥Í¡A¦ý«o¬O¨S¦³¸ê®Æ¦s¶i¥h¡A
¦ý¤@¯ë°õ¦æ«o¨S¦³°ÝÃD¡C
§A¸Õ¸Õ¤@¯ë°õ¦æ¡A¬Ýµ²ªG¦p¦ó
¿Ä¸ê¿Ä¨é·JÁ`SQLite3.rar (3.07 KB)

TOP

¥»©«³Ì«á¥Ñ lpk187 ©ó 2016-9-29 12:53 ½s¿è

¦^´_ 30# c_c_lai

¤@­Ó«Ü©_©Çªº°ÝÃD¡A§Ú¤]·d¤£À´¡I
¥H¤U­±³o¬qµ{¦¡½X¨Ó»¡¡A·Ó²z»¡¡A·í
try:
       c = conn.cursor()
       sql="SELECT * FROM [" + regs[0] + "] WHERE ¤é´Á = '" + date + "';"
       c.execute(sql)
       c.close()
§ä¤£¨ì¦¹¤é´Á¡AÀ³¸Ó·|²£¥Í¿ù»~¡A¶Çµ¹except Exception as e: °õ¦æ¤~¹ï¡A¦ý
¦bJupyter NoteBook «o¬O¤£·|²£¥Í¿ù»~(¥H¤@¯ëªºpyhton ·|¶Ç¦^¿ù»~°T®§)
§Ú¸ÕµÛ¥hSQLiteStudio¤¤¥´¤WÀ˸߿ù»~ªº¤é´Á¡AÁöµM§ä¤£¨ì¡A¦ý¤]¨S¦³²£¥Í¿ù»~¡A
©Ò¥H§Ú§ï¤Fµ{¦¡½X¡A§A¸Õ¬Ý¬Ý¡A½Ð½Æ»s¥H¤U¥N½X
¨ä¤¤¤]­×¥¿Â^¨úºô¸ô¸ê®Æªº°j°é¡A²{¦bÂ^¨úÅܫܧÖ
  1. #-*- coding:utf-8 -*-
  2. import requests
  3. from bs4 import BeautifulSoup
  4. import random
  5. import os
  6. import sqlite3
  7. import datetime
  8. import time

  9. # ÀH¾÷§ó§ï headers
  10. def head_random():
  11.     for i in range(10):
  12.             hs = ['Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36',
  13.                    'Mozilla/5.0 (iPhone; U; CPU iPhone OS 3_0 like Mac OS X; en-us) AppleWebKit/528.18 (KHTML, like Gecko) Version/4.0 Mobile/7A341 Safari/528.16',
  14.                    'Mozilla/5.0 (Linux; U; Android 4.1.2; zh-tw; GT-I9300 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30',
  15.                    'Mozilla/5.0 (iPad; U; CPU OS 3_2 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B334b Safari/531.21.10'
  16.                    'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0)']
  17.             hes = {"User-Agent":random.choice(hs)}
  18.     return hes

  19. # ¶°¥xÃҩҿĸê¿Ä¨é¾lÃB¥þ³¡¸ê®Æ
  20. def read_network_data(date,from_number):
  21.     url = 'http://www.twse.com.tw/ch/trading/exchange/MI_MARGN/MI_MARGN.php'
  22.     head =head_random()
  23.     payload = {"download":'',
  24.             "qdate":date,
  25.             "selectType":"ALL"}
  26.     res = requests.post(url, headers=head, data=payload)
  27.     soup=BeautifulSoup(res.text, "lxml")
  28.     tab = soup.select('tbody')[from_number] # 2­Óªí®æ¤§2
  29.     regs=[] # ªì©l°}¦C
  30.       
  31.     le=len(tab.select('tr')[0].select('td'))
  32.     for i in range(le): # ©w¸q2ºû°}¦Cºû«×
  33.         regs.append([])
  34.     for tr in tab.select('tr'): #Â^¨úªí®æ¸ê®Æ
  35.         for i in range(le):
  36.             if i==0 or i==1 or i==15:      #§â¤å¦r¦ê¤¤ªºªÅ¥Õ¤å¦r¥h°£±¼
  37.                 strs=tr.select('td')[i].text
  38.                 strs=str(strs.replace(' ',''))
  39.                 regs[i].append(strs)
  40.             else:    # §â¼Æ¦r¤¤ªº¤d¤À²Å¸¹ "," ¥h°£±¼
  41.                 ints=tr.select('td')[i].text
  42.                 ints=str(ints.replace(',',''))
  43.                 regs[i].append(ints)
  44.     return regs

  45. def check_db_exists(regs):
  46.     if not os.path.exists('twsedata.db'):   # Àˬdtwsedata.db¬O§_¦s¦b(©M¦¹µ{¦¡½X¬Û¦Pªº¸ê®Æ§¨)
  47.         conn = sqlite3.connect('twsedata.db')  # ¦pªG¨S¦³¡A´N«Ø¥ß¤@­ÓªÅ¥Õ¸ê®Æ®w¡A(sqlite3.connect) ¤]¬O³sµ²»y¥y¡A¦³¸ê®Æ®w´N³sµ²¡A¨S¦³´N«Ø¥ß
  48.         sql = "CREATE TABLE ªÑ²¼(ªÑ²¼¥N¸¹  char(10) PRIMARY KEY,ªÑ²¼¦WºÙ  char(20));"
  49.         conn.execute(sql) #¦b·s¸ê®Æ®w«Ø¥ßªÅ¥Õ¸ê®Æªí (ªÑ²¼)
  50.         sql = "CREATE TABLE  ¿Ä¸ê¿Ä¨é«H¥Î¥æ©ö²Î­p( \
  51.                                 ¤é´Á  datetime, \
  52.                                 ¶µ¥Ø  char(20), \
  53.                                 ¶R¶i INTEGER, \
  54.                                 ¶R¥X INTEGER, \
  55.                                 ²{ª÷¡]¨é¡^ÀvÁÙ INTEGER, \
  56.                                 «e¤é¾lÃB INTEGER, \
  57.                                 ¤µ¤é¾lÃB INTEGER);"
  58.         conn.execute(sql) #¦b·s¸ê®Æ«Ø¥ß ªÅ¥Õ¸ê®Æªí(¿Ä¸ê¿Ä¨é«H¥Î¥æ©ö²Î­p)
  59.         conn.commit() # Àx¦s
  60.         conn.close() #Ãö³¬
  61.             
  62.     n=0
  63.     conn = sqlite3.connect('twsedata.db') # conn©M¤W¤@­Ó if ..¤¤ªº conn¬O¤£¤@¼Ëªº ¡A¤W¤@­Ó¬O¨S¦³¸ê®Æ®w®É¤~§@¥Î¡A¬°§½³¡ÅܼƦӦ¹³B¡A«h¬°¥H¤U¨Ï¥Îªº¥þ§½ÅܼÆ
  64.     for i in regs[0]:  #¥Hª¦¦^¨Óªº¸ê®Æ°}¦Cªº²Ä¤@¦C¬°°j°é
  65.         try:      #¥ý¹Á¸Õ¬d¸ß i Åܼƪº¸ê®Æªí¬O§_¦s¦b¡A­Y¬O¤£¦s¦b·|µo¥X Exception ªº¿ù»~°T®§
  66.             c = conn.cursor()
  67.             sql = "select * from [" + i + "]"
  68.             c.execute(sql) # table does not exist
  69.             c.close()
  70.         except Exception as e:  #·ítry µo¥X¿ù»~°T®§(¤]´N¬OŪ¤£¨ì  i ¸ê®Æªí)¡A¦¹®É«Ø¥ß¤@­Ó i ¸ê®Æªí
  71.             c = conn.cursor()
  72.             sql="CREATE TABLE [" + i + "](¤é´Á  DATETIME PRIMARY KEY, \
  73.                                         ¸ê¶R¶i  INTEGER, \
  74.                                         ¸ê½æ¥X INTEGER, \
  75.                                         ¸ê²{ª÷ÀvÁÙ INTEGER, \
  76.                                         ¸ê«e¤é¾lÃB INTEGER, \
  77.                                         ¸ê¤µ¤é¾lÃB INTEGER, \
  78.                                         ¸ê­­ÃB INTEGER, \
  79.                                         ¨é¶R¶i  INTEGER, \
  80.                                         ¨é½æ¥X INTEGER, \
  81.                                         ¨é²{ª÷ÀvÁÙ INTEGER, \
  82.                                         ¨é«e¤é¾lÃB INTEGER, \
  83.                                         ¨é¤µ¤é¾lÃB INTEGER, \
  84.                                         ¨é­­ÃB INTEGER, \
  85.                                         ¸ê¨é¤¬©è INTEGER, \
  86.                                         µù°O char(5));"
  87.             c.execute(sql) #«Ø¥ß i ¸ê®Æªí
  88.             sql="INSERT INTO ªÑ²¼(ªÑ²¼¥N¸¹, ªÑ²¼¦WºÙ) \
  89.                 VALUES ('" + regs[0][n] + "','" + regs[1][n] + "');"
  90.             c.execute(sql)  # ¦bªÑ²¼¸ê®Æªí¤¤¼g¤JªÑ²¼¥N¸¹¡BªÑ²¼¦WºÙ
  91.             c.close() # Ãö³¬ c ª«¥ó
  92.         n += 1
  93.     conn.commit()
  94.     conn.close()
  95. def add_data(regs,date):
  96.     conn = sqlite3.connect('twsedata.db')
  97.     for i in range(len(regs[0])):
  98.         try: #Àˬd¬Y¤é´Á¬O§_¦s¦b©ó¸ê®Æªí¤¤¡A·í¬Y¤é´Á¦s¦b®É¡A¸õÂ÷³o¦¸ªº´`Àô¡A³o¸Ì«üªº¶È¬O³o¦¸¡A¤£¬O¸õÂ÷ for
  99.             c = conn.cursor()
  100.             sql="INSERT INTO [" + regs[0][i] + "](¤é´Á,¸ê¶R¶i,¸ê½æ¥X,¸ê²{ª÷ÀvÁÙ,¸ê«e¤é¾lÃB, \
  101.                                                 ¸ê¤µ¤é¾lÃB,¸ê­­ÃB,¨é¶R¶i,¨é½æ¥X,¨é²{ª÷ÀvÁÙ, \
  102.                                                 ¨é«e¤é¾lÃB,¨é¤µ¤é¾lÃB,¨é­­ÃB,¸ê¨é¤¬©è,µù°O) \
  103.                                         VALUES('" + date + "'," + regs[2][i] + "," + regs[3][i] + ", \
  104.                                                 " + regs[4][i] + ",  " + regs[5][i] + "," + regs[6][i] + ", \
  105.                                                 " + regs[7][i] + "," + regs[8][i] + ",  " + regs[9][i] + ", \
  106.                                                 " + regs[10][i] + "," + regs[11][i] + "," + regs[12][i] + ", \
  107.                                                 " + regs[13][i] + "," + regs[14][i]+ ",'" + regs[15][i] + "') ;"

  108.             c.execute(sql)
  109.         except Exception as e: #·í¤é´Á¤£¦s¦b®É¡A¼g¤J¸ê®Æ¨ì¸ê®Æªí¤¤
  110.             pass
  111.         else:
  112.             c.close()
  113.             
  114.     conn.commit()
  115.     conn.close()

  116. # ¥H¤U¬°µ{¦¡ªº±Ò©lÂI¡G
  117. StartDate=input('½Ð¿é¤J¶}©lÂ^¨ú¤é´Á(¦è¤¸¤é´Á¦p¡G2016/1/1)¡G')
  118. EndDate=input('½Ð¿é¤Jµ²§ôÂ^¨ú¤é´Á(¦è¤¸¤é´Á¦p¡G2016/1/31)¡G')
  119. #³B²z¤é´ÁÁÙ¯uªº«Ü³Â·Ð
  120. ts=time.time()
  121. StartDate = time.strptime(StartDate, "%Y/%m/%d")
  122. EndDate =time.strptime(EndDate, "%Y/%m/%d")
  123. StartDate = datetime.date(StartDate[0], StartDate[1], StartDate[2])
  124. EndDate =  datetime.date(EndDate[0], EndDate[1], EndDate[2])
  125. RangeDate = datetime.timedelta(days = 1)
  126. while StartDate <= EndDate:
  127.     yy,mm,dd=str(StartDate).split('-')
  128.     dat=datetime.datetime(int(yy), int(mm), int(dd))
  129.     dd=dat.strftime('%Y/%m/%d')
  130.     year=str(int(dd[0:4])-1911)
  131.     date=dd.replace(dd[0:4], year)
  132.     print('¥Ø«e°õ¦æºô¸ôÂ^¨ú',date ,'¤éªº¸ê®Æ¡A½Ðµy«á...')
  133.     re=read_network_data(date,1)
  134.     if re[0][0]=='¬dµL¸ê®Æ':
  135.         print(date,'¤é¡A¥i¯à¬°¥ð¥«¤é¡A¬dµL¸ê®Æ¡C')
  136.         StartDate = StartDate + RangeDate
  137.         continue
  138.     print('Àˬd¬O§_¦³·sªÑ²¼¥[¤J¡A½Ðµy«á...')
  139.     check_db_exists(regs=re)
  140.     print('±N¸ê®Æ¼g¤J¸ê®Æ®w¤¤¡A½Ðµy«á...')
  141.     add_data(regs=re,date=dd)
  142.     StartDate = StartDate + RangeDate
  143.     te = time.time()
  144.     print('ºI¦Ü¥Ø«e¡A®É¶¡¤w¯Ó¶O¡G', int(te - ts),'¬í')

  145. print('°õ¦æ§¹²¦¡I')
½Æ»s¥N½X

TOP

Untitled6.rar (4.96 KB)

TOP

¦^´_ 37# c_c_lai


   ³oÀ³¸Ó¤£·|¼vÅT¬d¸ß§a¡I

TOP

¦^´_ 40# c_c_lai

¤£¦n·N«ä¡A¤£¬O«Ü©ú¥Õ§Aªº·N«ä¬O¤°»ò¡H¥i¥HÁ|¦C»¡©ú¶Ü¡H¦]¬°§Ú¨S¦b¾Þ§@³]²¼¡A©Ò¥H¹ï³o¡A¤£©ú¥Õ

TOP

¦^´_ 43# c_c_lai

¦b­ì¨Óµ{§Ç¤¤¡A«Ø¥ß¸ê®Æªí®É¡A´N³£¦³«Ø¥ß¥DÁä (Primary Key)¡A©Ò¥H¬O¤£·|¦³­«½Æ­Èªº¡A
sql = "CREATE TABLE ªÑ²¼(ªÑ²¼¥N¸¹  char(10) PRIMARY KEY,....
sql="CREATE TABLE [" + i + "](¤é´Á  DATETIME PRIMARY KEY, \
­Y¦³¥²­n«Ø¥ß¥~¨ÓÁä(Secondary Key)¡A¥i¥H§ï¦¨
sql="CREATE TABLE [" + i + "] (¤é´Á DATETIME PRIMARY KEY  REFERENCES [0050] (¤é´Á), \
¥t¥~SQLite3´N¦³«Ø¥ß¯Á¤Þ

a.png
2016-9-30 09:40

TOP

¥»©«³Ì«á¥Ñ lpk187 ©ó 2016-9-30 10:03 ½s¿è

¦^´_ 35# c_c_lai

¦bsqlite3¤¤ ¥Î sql»yªk¡A¦³¨Ç³\¤£¦P¡A´N¬O¸ê®Æªí­n¥Î [ ] ¤¤¬A¸¹
  1. import sqlite3 as lit
  2. import pandas as pd

  3. conn = sqlite3.connect('twsedata.sqlite')
  4. data=pd.read_sql('select * from [0050]',conn)
  5. conn.close()
  6. data
½Æ»s¥N½X

TOP

¦^´_ 49# c_c_lai


   §A°õ¦æªº±¡ªp¡A¯uªº«Ü©_©Ç¡I§Ú°õ¦æ¤F3¦¸±q2016/1/1¨ì2016/9/29 ¤]³£¨S¦³±o¨ì¹³§A¤@¼Ëªºµ²ªG
§A¦A§â¸ê®Æ®w§R±¼¡AÆ[¹î²Ä¤@¦¸¬O¤£¬O·|¤£§¹¾ã¡A±q2016/1/1¨ì2016/9/29¦@¦³170µ§¸ê®Æ¡A¬Ý¬O¤£¬O·|¤£°÷
§Úµ{¦¡¸Ì­±¡A¥u¦³´¡¤JINSERT INTO...¨Ã¨S¦³­×§ïªº»y¥y¦Ó¥B·í¦³­«ÂЭȮɡA¨Ã¤£·|°õ¦æ¥ô¦ó°Ê§@
except Exception as e:
            pass
¦A³Â·Ð§A¤F

TOP

¥Ñ©ó sqlite3 ¦b¤é´Á®É¶¡ ¬O¥H¤å¦r¦ê¦s¤J¡A¦Ó«D¥H¤é´Á®É¶¡®æ¦¡¦s¤J(¦p¡G#2016/01/06#)
¦Ósqlite3ªºdate¨ç¼Æªº¤é´Á®æ¦¡¥²¶·¹³'2016-01-06'¦~¤ë¤é»Ý¥H'-'¹j¶} ¡A­Y¥H'2016/01/06' ±×½u '/'¹j¶}¡A¥HSQL»yªk·|µLªk­pºâ
©Ò¥H¦b¦s¤Jsqlite3¸ê®Æ®wªº¤é´Á¡A¥²¶·¥ý³B²z

¦b dd=dat.strftime('%Y/%m/%d')ªº¤U¦æ»Ý¥[¤J¥t¤@¥y
sqldate=dat.strftime('%Y-%m-%d')

¦Ó³o¥yadd_data(regs=re,date=dd)¥²¶·­×§ï¬°
add_data(regs=re,date=sqldate)

¦b¥H«áªº¤é´Á³B²z¡A´N·|®e©ö³B²z¤F

sqlite3¦b¤é´Á¬d¸ß¤è­±¡A¨Ò¦p»¡­n¬d¸ß '2016-01-01' ¨ì '2016-01-31'
¦bSQL»yªk¤è­± ­ì¨Óªº¥Îªk WHERE ¤é´Á BETWEEN '2016-01-01' AND '2016-01-31'
¦Ósqlite3 «o¤£¯à¥H BETWEEN ¥h³B²z¡A´N¹³«e­±»¡ªº¡A¤é´Á®É¶¡ ¬O¥H¤å¦r¦ê¦s¤J¡A¤å¦r¦ê¤£¯à¥Î¦b¤é´Á®É¶¡³B²z

©Ò¥Hsqlite3ªºSQL»yªk¬°
"select * from [0050] where julianday(¤é´Á)>=julianday('2016-01-01') and julianday(¤é´Á)<=julianday('2016-01-31')"

TOP

        ÀR«ä¦Û¦b : ¡i¬O§_µo´§¤F¨}¯à¡H¡j¤H¶¡¹Ø©R¦]¬°µu¼È¡A¤~§óÅã±o¬Ã¶Q¡CÃø±o¨Ó¤@½ë¤H¶¡¡AÀ³°Ý¬O§_¬°¤H¶¡µo´§¤F¦Û¤vªº¨}¯à¡A¦Ó¤£­n¤@¨ý¨Dªø¹Ø¡C
ªð¦^¦Cªí ¤W¤@¥DÃD