在 Python 上操作 MySQL 可透過 MySQLdb 的套件來使用,安裝 MySQLdb 須依據 Anaconda 32位元或64位元版本來安裝,這部分要特別注意,不然無法在上 Jupyter 上對 MySQL 進行操作。
我是Amin,喜好整合軟體之間的應用至數據分析,如Excel VBA、Python、C/C++、C#、JavaScript、Google Apps Script、Batch、MultiCharts的相互應用,歡迎各領域同好相互討論,創造人生精采的火花
最新消息
[公告2014/05/30] 如有需要將部落格中,任何一篇文章的程式碼使用在商業用途,請與我聯繫。
[公告2015/04/26] Line版的 iInfo程式與投資應用 群組已上線想加入的朋友們,請先查看 "入群須知" 再與我聯繫 Line : aminwhite5168,加入請告知身分與回答 "入群須知" 的問題。
[公告2018/04/22] 台北 Python + Excel VBA 金融資訊爬蟲課程,課程如網頁內容 金融資訊爬蟲班:台北班 Python 金融資訊爬蟲、EXCEL VBA 金融資訊爬蟲。
[公告2019/01/08] 請注意:我再次重申,部落格文章的程式碼,是要提供各位參考與學習,一旦網頁改版請自行修改,別要求東要求西要我主動修改,你們用我寫東西賺錢了、交差了,請問有分我一杯羹嗎?既然賺錢沒分我,請問有什麼理由要求我修改,如果沒能力改,就花錢來找我上課。
[公告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)失效導致頁面載入變慢,目前已做調整,請多見諒。
[公告2020/05/22] 頁面載入速度慢,起因為部分JS來源(alexgorbatchev.com)失效導致頁面載入變慢,目前已做調整,請多見諒。
2018年1月6日 星期六
2018年1月1日 星期一
Python 操作資料庫 (3) --- MySQL:"Unknown column 'VB.net' in 'field list'"
使用 Python 操作 MSQL 遇到 "Unknown column 'VB.net' in 'field list'" 問題。
Python 操作資料庫 (2) --- MySQL:Warning : Table 'table' already exists
用 Python 操作 MySQL 有機會遇到警告的訊息,但卻不影響程式的執行結果,但看久了總會覺得很煩燥,如何將這警告訊息移除?
Python 操作資料庫 (1) --- MySQL:Duplicate entry '1' for key 'PRIMARY'
使用 Python 操作 MSQL 遇到 Duplicate entry '1' for key 'PRIMARY' 問題。
2015年11月14日 星期六
Ubuntu安裝Redmine(3) --- Apache2 + MySQL + PHP安裝
繼 Ubuntu + Ruby + Rails + Apache2 + MySQL + Redmine (2) --- Ruby + Rails安裝後,接著開始安裝Apache server、資料庫MySQL、PHP。
2012年9月7日 星期五
使用Stored Procedure列出交易日
透過SQLyog寫一個Stored Procedure(預存程序),來產生一個連續日期的序列
要產生時間序列前先初始化gen_time_sequence預存程序
取得時間序列產生的天數,執行以下SQL指令
執行結果
取得時間序列中的前10筆資料
執行結果
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繼續。
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函數庫很重要。
最後看看測試結果,我們從stock資料庫中取出前10筆資料
使用VC6寫一個簡單的程式去取得這10資料
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"。
程式如下
#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 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"。
Step 2. 開始安裝MySQL Connector C 6.0.2,按Next繼續。
在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"。
訂閱:
文章 (Atom)