最新消息

[公告2014/05/30] 如有需要將部落格中,任何一篇文章的程式碼使用在商業用途,請與我聯繫。

[公告2015/04/26] Line版的 iInfo程式與投資應用 群組已上線想加入的朋友們,請先查看 "入群須知" 再與我聯繫 Line : aminwhite5168,加入請告知身分與回答 "入群須知" 的問題。

[公告2018/04/22] 台北 Python + Excel VBA 金融資訊爬蟲課程,課程如網頁內容 金融資訊爬蟲班:台北班 Python 金融資訊爬蟲、EXCEL VBA 金融資訊爬蟲。

[公告2019/01/08] 請注意:我再次重申,部落格文章的程式碼,是要提供各位參考與學習,一旦網頁改版請自行修改,別要求東要求西要我主動修改,你們用我寫東西賺錢了、交差了,請問有分我一杯羹嗎?既然賺錢沒分我,請問有什麼理由要求我修改,如果沒能力改,就花錢來找我上課。

[公告2019/12/01] 若各位有 Excel VBA 案子開發需求,歡迎與我聯繫,可接案處理。

[公告2020/05/22] 頁面載入速度慢,起因為部分JS來源(alexgorbatchev.com)失效導致頁面載入變慢,目前已做調整,請多見諒。
顯示具有 MySQL 標籤的文章。 顯示所有文章
顯示具有 MySQL 標籤的文章。 顯示所有文章

2018年1月6日 星期六

Python 操作資料庫 (4) --- MySQL:安裝MySQLdb

在 Python 上操作 MySQL 可透過 MySQLdb 的套件來使用,安裝 MySQLdb 須依據 Anaconda  32位元或64位元版本來安裝,這部分要特別注意,不然無法在上 Jupyter 上對 MySQL 進行操作。

2018年1月1日 星期一

2012年9月7日 星期五

使用Stored Procedure列出交易日

透過SQLyog寫一個Stored Procedure(預存程序),來產生一個連續日期的序列
DELIMITER $$
CREATE
    PROCEDURE `stock`.`gen_time_sequence`(startstamp TIMESTAMP, endstamp TIMESTAMP, intval INTEGER, unitval VARCHAR(10))
    BEGIN
 DECLARE thisStamp TIMESTAMP;
 DECLARE nextStamp TIMESTAMP;
 SET thisStamp = startstamp;

 -- Drop and Create the temp table

 DROP TEMPORARY TABLE IF EXISTS timestamp_sequence;

 CREATE TEMPORARY TABLE IF NOT EXISTS timestamp_sequence(
 id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,    
 TIME TIMESTAMP
 );    
  
 -- 迴圈, 每次增加間隔
 REPEAT 
  SELECT CASE unitval
   WHEN 'MICROSECOND' THEN TIMESTAMPADD(MICROSECOND, intval, thisStamp)
   WHEN 'SECOND'      THEN TIMESTAMPADD(SECOND, intval, thisStamp)
   WHEN 'MINUTE'      THEN TIMESTAMPADD(MINUTE, intval, thisStamp)
   WHEN 'HOUR'        THEN TIMESTAMPADD(HOUR, intval, thisStamp)
   WHEN 'DAY'         THEN TIMESTAMPADD(DAY, intval, thisStamp)
   WHEN 'WEEK'        THEN TIMESTAMPADD(WEEK, intval, thisStamp)
   WHEN 'MONTH'       THEN TIMESTAMPADD(MONTH, intval, thisStamp)
   WHEN 'QUARTER'     THEN TIMESTAMPADD(QUARTER, intval, thisStamp)
   WHEN 'YEAR'        THEN TIMESTAMPADD(YEAR, intval, thisStamp)
   END INTO nextStamp;
  -- 過濾週六,週日與特殊日子
  IF DAYOFWEEK(thisStamp) <> 1 AND DAYOFWEEK(thisStamp) <> 7 OR DATE(thisStamp) = STR_TO_DATE('2012-08-02', '%Y-%m-%d') THEN
   INSERT INTO timestamp_sequence(Dateid, Weekdayid) SELECT DATE(thisStamp), DAYOFWEEK(thisStamp);
  ELSEIF DATE(thisStamp) = STR_TO_DATE('2012-03-03', '%Y-%m-%d') THEN
   INSERT INTO timestamp_sequence(Dateid, Weekdayid) SELECT DATE(thisStamp), DAYOFWEEK(thisStamp);
  END IF;
  SET thisStamp = nextStamp;
 UNTIL thisStamp >= endstamp
 END REPEAT;
    END$$
DELIMITER ;

要產生時間序列前先初始化gen_time_sequence預存程序
CALL gen_time_sequence('2012-01-01','2012-12-31', 1, 'DAY');  

取得時間序列產生的天數,執行以下SQL指令
SELECT COUNT(1) FROM timestamp_sequence;

執行結果

取得時間序列中的前10筆資料
select * from timestamp_sequence limit 10;

執行結果

2012年8月4日 星期六

Python 安裝 MySQLdb 套件

在Python shell執行"import MySQLdb",如果出現錯誤訊息”ImportError: No module named MySQLdb”

請到http://www.codegood.com/ 下載安裝最新版MySQL-python 應用程式套件 MySQL-python-1.2.3.win32-py2.7.exe 


各位也可以用MySQL-python-1.2.3.tar.gz 安裝MySQL套件,不過裝得起來的可是少之又少,所以還是建議用MySQL-python-1.2.3.win32-py2.7.exe,才不會浪費時間
安裝完後再執行一次"import MySQLdb",若沒有出現錯誤訊息,即表示安裝成功

用簡單PC或是NB建立屬於自己的Server


想要一個Server的話一點都不難,可以參考以下相關連結Apache, PHP, MySQL, phpMyAdmin的安裝即可輕鬆擁有
Apache HTTP Server 2.2.22
PHP 5.2.9-2
MySQL Server 5.1
phpMyAdmin-3.4.9-all-langiages  

或是採用懶人包一次將所有的軟體一次安裝完成
AppServ

MySQL Server 5.1 安裝

  MySQL安裝篇 
Step 1. 顯示MySQL Server 5.1安裝精靈的起始畫面,按Next繼續。

Step 2. 選擇安裝的類型,需要典型安裝(Typical)、完全安裝(Complete)與自訂安裝(Custom),這裡選擇完全安裝(Complete),按Next繼續。

Step 3. 選擇完安裝方式後,顯示所有安裝的預設路徑,預設的安裝路徑為"c:\program files\mysql\mysql server 5.1\",確定後按Install開始進行安裝。

Step 4. 顯示安裝畫面,請稍等一下。

Step 5. 顯示MySQL廣告頁面,按Next繼續。

Step 6. 顯示安裝完成的畫面,接下來要開始設定相關的路徑變數,按Finish結束安裝。

Step 7. MySQL服務安裝精靈開始進行相關的設定,顯示歡迎畫面,按Next繼續。

Step 8. 選擇設定類型:詳細設定或標準設定 , 這裡選擇簡單的作法 , 所以新安裝標準且不需轉移的設定,按Next繼續。

Step 9. 顯示要不要把MySQL安裝成windows的服務,另外一個選項是把mysql的執行檔路徑加入環境變數裡,可選擇是否要用命令列模式來啟動MySQL,這裡勾選安裝為windows服務,按Next繼續。

Step 10. 設定MySQL root密碼,以便未來安裝phpMyAdmin的執行與勾選允許遠端主機使用root連線的用能,設定完密碼後,按Next繼續。

Step 11. 完成上述相關的設定後,顯示準備開始執行安裝,按Execute進行安裝。

Step 12. 若一切無誤,即可開始啟用MySQL,按Finish結束安裝。

Python匯入CSV檔到MySQL中

建立一個名為test的MySQL資料庫,再test資料庫中建立一個名為stock的資料表,其結構如下圖:


透過Python來匯入1107_20120102.csv到stock的資料表中,使用下面SQL的語法來達成匯入資料的作業:
"LOAD DATA LOCAL INFILE 'F:\\stock_database\\sale_otc1\\20120102\\1107_20120102.csv' \
INTO TABLE stock CHARACTER SET 'utf8'\
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"' \
LINES TERMINATED BY '\\r\\n' \
IGNORE 1 LINES (saledate, stockkind, stockid ,openprice, highprice, lowprice, lastprice, brokerid, price, buyvol, sellvol);"
匯入結果如下圖:



VC6連結MySQL資料庫的編譯環境建立

Step 1. 安裝完整的MySQL。

Step 2. 確認"C:\Program Files\MySQL\MySQL Server 5.1"路徑下有include、lib的目錄,這個路徑對未來VC要引用MySQL函數庫很重要。


Step 3. 在「VC6」、「Tools」、「Options」、「Directories」分別加入需使用的MySQL的函數庫的include、lib目錄。
在Show directories for選擇include files,新增"C:\Program Files\MySQL\MySQL Server 5.1\INCLUDE"。

在Show directories for選擇Library files,新增"C:\Program Files\MySQL\MySQL Server 5.1\LIB\DEBUG" or "C:\Program Files\MySQL\MySQL Server 5.1\LIB\OPT"。


最後看看測試結果,我們從stock資料庫中取出前10筆資料

使用VC6寫一個簡單的程式去取得這10資料

程式如下
#include <winsock.h>
#include <mysql.h>
#include <windows.h>
#pragma comment(lib, "libmysql.lib")

BOOL main(int argc, TCHAR* argv[])
{
 unsigned short Port = 3306;
 char *IPAddress = "localhost";
 char *UserName = "root";
 char *Password = "51685168";
 char *DBName = "stock";
 unsigned long i;
 printf("Start... \n");

 MYSQL *ssock;
 MYSQL_RES   *res;      
 MYSQL_ROW   row;   

 ssock = (MYSQL *)malloc(sizeof(MYSQL)); 
 
 //在某些版本中,不需要初始化工作,可查看mysql.H以及readme
 /*mysql_init(ssock);
 if(ssock == NULL)
 {
  printf("EROR: MySQL ssock init error. \n");
  return FALSE;
 }*/
 ssock = mysql_init(NULL);
 if(!ssock)
 {
  printf("EROR: MySQL ssock init error. \n");
  return EXIT_FAILURE;
 }
 printf("MySQL ssock init OK. \n");


 //建立與資料庫的連結
 ssock = mysql_real_connect(ssock, IPAddress, UserName, Password, NULL, Port, NULL, 0);
 if(!ssock)
 {
  printf("conn fail... \n");
  unsigned int mtint = mysql_errno(ssock);
  return FALSE;
 }
 printf("MySQL connnect OK... \n");

 mysql_set_character_set(ssock, "uft8");
 //連結指定的資料庫
 if(mysql_select_db(ssock, DBName) != 0)
 {
  printf("select db error. \n");
  return FALSE;
 }
 printf("select db OK. \n");

 //利用SQL語法查詢目前資料庫的版本
 printf("version=%d \n", mysql_get_server_version(ssock));
 
 //SQL查詢語法
 if(mysql_query( ssock, "SELECT * FROM  otc LIMIT 10"))  
 {
  printf("mysql_query() Error, %s\n", mysql_error(ssock));  
 }

 if( !(res = mysql_store_result(ssock)) )  
 {
  printf("mysql_store_result() Error, %s\n", mysql_error(ssock));  
 } 

 while( (row = mysql_fetch_row(res)) )
 {          
  for(i=0 ; i<mysql_num_fields(res); i++)  
  {
   printf("%s ",row[i]);
  }    
  printf("\n");
 }

 //釋放資料庫連線
 mysql_free_result(res);

 //關閉資料庫
 mysql_close(ssock);
 printf("End... \n");

 return TRUE;
}

VC6使用Mysql API建立編譯執行的環境 (不裝MySQL)

 Step 1. 到MySQL網站下載安裝MySQL Connector/C (libmysql)

Step 2.  開始安裝MySQL Connector C 6.0.2,按Next繼續。

Step 3. 勾選 "I accept therms in the License Agreement",按Next繼續。

Step 4. 選擇安裝類型,典型安裝(Typical)、自訂安裝(Custom)、完全安裝(Complete),點選 "完全安裝" 繼續。

Step 5. 如果前面設定沒有問題,按Install開始安裝。

Step 6. 安裝精靈正在安裝 "MySQL Connector C 6.0.2",稍等一下。

Step 7. 安裝完成後,顯示下面的畫面即表示完成 "MySQL Connector C 6.0.2"  安裝。 

Step 8. 確認"C:\Program Files\MySQL\MySQL Connector C 6.0.2\"下是否有include、lib的資料夾,也一併記住該路徑的位置。

Step 9. 在「VC6」、「Tools」、「Options」、「Directories」分別加入需使用的MySQL的函數庫的include、lib目錄。
在Show directories for選擇include files,新增"C:\Program Files\MySQL\MySQL Connector C 6.0.2\INCLUDE"。


在Show directories for選擇Library files,新增"C:\Program Files\MySQL\MySQL Connector C 6.0.2\DEBUG" or "C:\Program Files\MySQL\MySQL Server 5.1\LIB\OPT"。