http://casey.blog.51cto.com/9994043/1707905python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
#-*- coding: UTF-8 -*-
'''
create a connection pool
'''
from
DBUtils
import
PooledDB
import
MySQLdb
import
string
maxconn
=
30
#最大鏈接數
mincached
=
10
#最小空閒鏈接
maxcached
=
20
#最大空閒鏈接
maxshared
=
30
#最大共享鏈接
connstring
=
"root#root#127.0.0.1#3307#pystock#utf8"
#數據庫地址
dbtype
=
"mysql"
#選擇mysql做爲存儲數據庫
def
createConnectionPool(connstring, dbtype):
db_conn
=
connstring.split(
"#"
);
if
dbtype
=
=
'mysql'
:
try
:
pool
=
PooledDB.PooledDB(MySQLdb, user
=
db_conn[
0
],passwd
=
db_conn[
1
],host
=
db_conn[
2
],port
=
string.atoi(db_conn[
3
]),db
=
db_conn[
4
],charset
=
db_conn[
5
], mincached
=
mincached,maxcached
=
maxcached,maxshared
=
maxshared,maxconnections
=
maxconn)
return
pool
except
Exception, e:
raise
Exception,
'conn datasource Excepts,%s!!!(%s).'
%
(db_conn[
2
],
str
(e))
return
None
pool
=
createConnectionPool(connstring, dbtype)
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
|
#-*- coding: UTF-8 -*-
'''
Created on 2015-3-13
@author: Casey
'''
import
MySQLdb
from
stockmining.stocks.setting
import
LoggerFactory
import
connectionpool
class
DBOperator(
object
):
def
__init__(
self
):
self
.logger
=
LoggerFactory.getLogger(
'DBOperator'
)
#self.conn = None
def
connDB(
self
):
#單鏈接
#self.conn=MySQLdb.connect(host="127.0.0.1",user="root",passwd="root",db="pystock",port=3307,charset="utf8")
#鏈接池中獲取鏈接
self
.conn
=
connectionpool.pool.connection()
return
self
.conn
def
closeDB(
self
):
if
(
self
.conn !
=
None
):
self
.conn.close()
def
insertIntoDB(
self
, table,
dict
):
try
:
if
(
self
.conn !
=
None
):
cursor
=
self
.conn.cursor()
else
:
raise
MySQLdb.Error(
'No connection'
)
sql
=
"insert into "
+
table
+
"("
param
=
[]
for
key
in
dict
:
sql
+
=
key
+
','
param.append(
dict
.get(key))
param
=
tuple
(param)
sql
=
sql[:
-
1
]
+
") values("
for
i
in
range
(
len
(
dict
)):
sql
+
=
"%s,"
sql
=
sql[:
-
1
]
+
")"
self
.logger.debug(sql
%
param)
n
=
cursor.execute(sql, param)
self
.conn.commit()
cursor.close()
except
MySQLdb.Error,e:
self
.logger.error(
"Mysql Error %d: %s"
%
(e.args[
0
], e.args[
1
]))
self
.conn.rollback()
def
execute(
self
, sql):
try
:
if
(
self
.conn !
=
None
):
cursor
=
self
.conn.cursor()
else
:
raise
MySQLdb.Error(
'No connection'
)
n
=
cursor.execute(sql)
return
n
except
MySQLdb.Error,e:
self
.logger.error(
"Mysql Error %d: %s"
%
(e.args[
0
], e.args[
1
]))
def
findBySQL(
self
, sql):
try
:
if
(
self
.conn !
=
None
):
cursor
=
self
.conn.cursor()
else
:
raise
MySQLdb.Error(
'No connection'
)
cursor.execute(sql)
rows
=
cursor.fetchall()
return
rows
except
MySQLdb.Error,e:
self
.logger.error(
"Mysql Error %d: %s"
%
(e.args[
0
], e.args[
1
]))
def
findByCondition(
self
, table, fields, wheres):
try
:
if
(
self
.conn !
=
None
):
cursor
=
self
.conn.cursor()
else
:
raise
MySQLdb.Error(
'No connection'
)
sql
=
"select "
for
field
in
fields:
sql
+
=
field
+
","
sql
=
sql[:
-
1
]
+
" from "
+
table
+
" where "
param
=
[]
values
=
''
for
where
in
wheres:
sql
+
=
where.key
+
"='%s' and "
param.append(where.value)
param
=
tuple
(param)
self
.logger.debug(sql)
n
=
cursor.execute(sql[:
-
5
]
%
param)
self
.conn.commit()
cursor.close()
except
MySQLdb.Error,e:
self
.logger.error(
"Mysql Error %d: %s"
%
(e.args[
0
], e.args[
1
]))
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
#-*- coding: UTF-8 -*-
'''
Created on 2015-3-11
@author: Casey
'''
import
logging
import
time
'''
傳入名稱
'''
def
getLogger(name):
now
=
time.strftime(
'%Y-%m-%d %H:%M:%S'
)
logging.basicConfig(
level
=
logging.DEBUG,
format
=
now
+
" : "
+
name
+
' LINE %(lineno)-4d %(levelname)-8s %(message)s'
,
datefmt
=
'%m-%d %H:%M'
,
filename
=
"d:\\stocks\stock.log"
,
filemode
=
'w'
);
console
=
logging.StreamHandler();
console.setLevel(logging.DEBUG);
formatter
=
logging.Formatter(name
+
': LINE %(lineno)-4d : %(levelname)-8s %(message)s'
);
console.setFormatter(formatter);
logger
=
logging.getLogger(name)
logger.addHandler(console);
return
logger
if
__name__
=
=
'__main__'
:
getLogger(
"www"
).debug(
"www"
)
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
|
#-*- coding: UTF-8 -*-
'''
Created on 2015-3-1
@author: Casey
'''
import
urllib
import
re
import
sys
from
setting
import
params
import
urllib2
from
db
import
*
dbOperator
=
DBOperator()
table
=
"stock_quote_yahoo"
'''查找指定日期股票流量'''
def
isStockExitsInDate(table, stock, date):
sql
=
"select * from "
+
table
+
" where code = '%d' and date='%s'"
%
(stock, date)
n
=
dbOperator.execute(sql)
if
n >
=
1
:
return
True
def
getHistoryStockData(code, dataurl):
try
:
r
=
urllib2.Request(dataurl)
try
:
stdout
=
urllib2.urlopen(r, data
=
None
, timeout
=
3
)
except
Exception,e:
print
">>>>>> Exception: "
+
str
(e)
return
None
stdoutInfo
=
stdout.read().decode(params.codingtype).encode(
'utf-8'
)
tempData
=
stdoutInfo.replace(
'"'
, '')
stockQuotes
=
[]
if
tempData.find(
'404'
) !
=
-
1
: stockQuotes
=
tempData.split(
"\n"
)
stockDetail
=
{}
for
stockQuote
in
stockQuotes:
stockInfo
=
stockQuote.split(
","
)
if
len
(stockInfo)
=
=
7
and
stockInfo[
0
]!
=
'Date'
:
if
not
isStockExitsInDate(table, code, stockInfo[
0
]):
stockDetail[
"date"
]
=
stockInfo[
0
]
stockDetail[
"open"
]
=
stockInfo[
1
]
#開盤
stockDetail[
"high"
]
=
stockInfo[
2
]
#最高
stockDetail[
"low"
]
=
stockInfo[
3
]
#最低
stockDetail[
"close"
]
=
stockInfo[
4
]
#收盤
stockDetail[
"volume"
]
=
stockInfo[
5
]
#交易量
stockDetail[
"adj_close"
]
=
stockInfo[
6
]
#收盤adj價格
stockDetail[
"code"
]
=
code
#代碼
dbOperator.insertIntoDB(table, stockDetail)
result
=
tempData
except
Exception as err:
print
">>>>>> Exception: "
+
str
(dataurl)
+
" "
+
str
(err)
else
:
return
result
finally
:
None
def
get_stock_history():
#滬市2005-2015歷史數據
for
code
in
range
(
601999
,
602100
):
dataUrl
=
"http://ichart.yahoo.com/table.csv?s=%d.SS&a=01&b=01&c=2005&d=01&e=01&f=2015&g=d"
%
code
print
getHistoryStockData(code, dataUrl )
#深市2005-2015歷史數據
for
code
in
range
(
1
,
1999
):
dataUrl
=
"http://ichart.yahoo.com/table.csv?s=%06d.SZ&a=01&b=01&c=2005&d=01&e=01&f=2015&g=d"
%
code
print
getHistoryStockData(code, dataUrl)
#中小板股票
for
code
in
range
(
2001
,
2999
):
dataUrl
=
"http://ichart.yahoo.com/table.csv?s=%06d.SZ&a=01&b=01&c=2005&d=01&e=01&f=2015&g=d"
%
code
print
getHistoryStockData(code, dataUrl)
#創業板股票
for
code
in
range
(
300001
,
300400
):
dataUrl
=
"http://ichart.yahoo.com/table.csv?s=%d.SZ&a=01&b=01&c=2005&d=01&e=01&f=2015&g=d"
%
code
print
getHistoryStockData(code, dataUrl)
def
main():
"main function"
dbOperator.connDB()
get_stock_history()
dbOperator.closeDB()
if
__name__
=
=
'__main__'
:
main()
|
v_sz000001="51~平安銀行~000001~11.27~11.27~11.30~316703~151512~165192~11.27~93~11.26~ 4352~11.25~4996~11.24~1037~11.23~1801~11.28~1181~11.29~2108~11.30~1075~11.31~1592~11.32~ 1118~15:00:24/11.27/3146/S/3545407/17948|14:56:59/11.26/15/S/16890/17787| 14:56:56/11.25/404/S/454693/17783|14:56:54/11.26/173/B/194674/17780|14:56:51 /11.26/306/B/344526/17777|14:56:47/11.26/16/B/18016/17773~ 20151029150142~0.00~0.00~11.36~11.25~ 11.26/313557/354285045~ 316703~35783~0.27~7.38~~11.36~11.25~0.98~1330.32~1612.59~1.03~12.40~10.14~";
v_ff_sz000001="sz000001~21162.20~24136.40~-2974.20~-8.31~14620.87~11646.65~2974.22~ 8.31~35783.07~261502.0~261158.3~平安銀行~20151029~20151028^37054.20^39358.20~ 20151027^39713.50^42230.70~20151026^82000.80^83689.90~20151023^81571.30^71743.10";
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
|