튜토리얼 [바로가기]

API 문서 [바로가기]

예제 [바로가기]

'Developments > MongoDB' 카테고리의 다른 글

GridFS를 이용한 대용량 도큐먼트 처리  (0) 2018.03.09
몽고DB 설치 on Ubuntu  (0) 2016.10.31
몽고DB 스키마 디자인  (0) 2016.08.05
몽고DB 관리툴  (0) 2016.07.30
몽고DB의 용어와 문법적 차이  (0) 2016.07.29
MongoDB 스키마 디자인을 위한 6가지 규칙 요약


참조:

http://haruair.com/blog/3055

https://blog.outsider.ne.kr/655


'Developments > MongoDB' 카테고리의 다른 글

몽고DB 설치 on Ubuntu  (0) 2016.10.31
pymongo 도움말  (0) 2016.08.07
몽고DB 관리툴  (0) 2016.07.30
몽고DB의 용어와 문법적 차이  (0) 2016.07.29
몽고DB 명령어  (0) 2016.07.29
몽고DB를 사용하다보면 비주얼적으로 관리 할 수 있는 도구가 필요할 때가 있다.
여러 관리툴들이 존재하는데 이중 나만의 취향에 맞는 도구만 추려봤다.


1. Robomongo [바로가기]

DB 쉘 프로그램이다.

윈도우즈, OSX, 리눅스를 지원한다.

UI가 깔끔하다.

오픈소스이면서 무료이다.

툴로 사용하기에 매우 쾌적하다.



2. MongoClient [바로가기]

DB서버 모니터링을 지원(차트로 표시) 한다.

간편하게 데이터를 추가 할 수 있다.

윈도우즈, OSX, 리눅스를 지원한다.

UI가 이쁘다.

오픈소스이면서 무료이다.

프로그램 구동시 조금 느린 감이 있다.



참조: https://docs.mongodb.com/ecosystem/tools/administration-interfaces/



'Developments > MongoDB' 카테고리의 다른 글

pymongo 도움말  (0) 2016.08.07
몽고DB 스키마 디자인  (0) 2016.08.05
몽고DB의 용어와 문법적 차이  (0) 2016.07.29
몽고DB 명령어  (0) 2016.07.29
몽고DB 윈도우에 설치  (0) 2016.07.28

We recommend using pip to install pymongo on all platforms:

$ python -m pip install pymongo

To get a specific version of pymongo:

$ python -m pip install pymongo==3.1.1

To upgrade using pip:

$ python -m pip install --upgrade pymongo

* 윈도우즈에 인스톨 할 때에는 cmd.exe (명령프롬프트)를 관리자권한으로 실행해야 한다.


출처: http://api.mongodb.com/python/current/installation.html

발췌: https://docs.mongodb.com/manual/reference/sql-comparison/


* 용어의 차이


RDBMS

 MongoDB

 TABLE

 COLLECTION

 ROW

 BSON DOCUMENT

 COLUMN

 FIELD

 INDEX

 INDEX 

 PRIMARY KEY

 OBJECT_ID FILED

 TABLE JOINS (RELATIONSHIP)

 EMBEDDED, LINKING 


* 쿼리 명령어 차이

 SQL

 MongoDB

 CREATE TALE test (a int, b int)

 db.createCollection("test")

 INSERT INTO test VALUES (3,5)

 db.table.insert({name:3, age:5})

 SELECT name, age FROM test

 db.table.find({}, {name:1, age:1})

 SELECT * FROM test

 db.table.find()

 SELECT * FROM testWHERE age=34

 db.table.find({age:34})

 SELECT a,b FROM testWHERE age=34

 db.table.find({age:34}, {a:1,b:1})

 SELECT * FROM test WHERE age=34 ORDER BY name

 db.table.find({age:34}).sort({name:1})

 SELECT * FROM test WHERE age>34

 db.table.find({'age':{$gt:34}})

 SELECT * FROM test WHERE age<34

 db.table.find({'age':{$lt:34}})

 SELECT * FROM test WHERE name LIKE"%Joe%"

 db.table.find({name:/Joe/})

 SELECT * FROM test WHERE name LIKE "Joe%"

 db.table.find({name:/^Joe/})

 SELECT * FROM test WHERE age>34 AND age<=40

 db.table.find({'age':{$gt:34,$lte:40}})

 SELECT * FROM test  ORDER BY name DESC

 db.table.find().sort({name:-1})

 SELECT * FROM test WHERE a=1 and b='q'

 db.table.find({a:1,b:'q'})

 SELECT * FROM test LIMIT 10 SKIP 20

 db.table.find().limit(10).skip(20)

 SELECT * FROM test WHERE a=1 or b=2

 db.table.find( { $or : [ { a : 1 } , { b : 2 } ] } )

 SELECT * FROM test LIMIT 1

 db.table.findOne()

 SELECT DISTINCT last_name FROM test 

 db.table.distinct('last_name')

 SELECT COUNT(*y) FROM test 

 db.table.count()

 SELEC COUNT(*y) FROM test where AGE > 30

 db.table.find({age: {'$gt': 30}}).count()

 SELECT COUNT(AGE) from test 

 db.table.find({age: {'$exists':true}}).count()

 CREATE INDEX myindexname ON test (name)

 db.table.ensureIndex({name:1})

 CREATE INDEX myindexname ON test(name,ts DESC)

 db.table.ensureIndex({name:1,ts:-1})

 EXPLAIN SELECT * FROM users WHERE z=3

 db.table.find({z:3}).explain()

 UPDATE users SET a=1 WHERE b='q'

 db.table.update({b:'q'}, {$set:{a:1}},false,true)

 UPDATE users SET a=a+2 WHERE b='q'

 db.table.update({b:'q'}, {$inc:{a:2}},false,true)

 DELETE FROM users WHERE z="abc"

 db.table.remove({z:'ab'});


SQL SELECT 쿼리에 대하여 궁금하다면? [바로가기]

RDBMS Scheme를 몽고DB Data modeling으로 변경 [바로가기]

'Developments > MongoDB' 카테고리의 다른 글

pymongo 도움말  (0) 2016.08.07
몽고DB 스키마 디자인  (0) 2016.08.05
몽고DB 관리툴  (0) 2016.07.30
몽고DB 명령어  (0) 2016.07.29
몽고DB 윈도우에 설치  (0) 2016.07.28

◎ 데이터베이스가 생성될 물리적 경로생성
mkdir c:\MONGODB\test 

◎ mongoDB 버전 확인
mongod --version

◎ mongoDB 인스턴스 활성화
mongod --dbpath c:\mongodb\test
-- mogodb shell프로그램 실행
mongo 

 

◎ test 데이터베이스로 이동할때
>use test

◎ 데이터베이스 목록 출력
>show dbs

◎ 데이터베이스 상태확인 
>db.stats()

◎ 데이터베이스 shutdown
admin 영억으로 이동후에 셧다운 해야함.
>use admin  
>db.shutdownServer() 

 

◎ 데이터베이스 삭제
>use 데이터베이스명

>db.dropDatabase() 


◎ 데이터베이스 로그아웃
>db.logout()

◎collection 생성
capped:true이면 해당 익스텐트를 모두 사용하게되면
처음부터 재 사용할 수 있는 데이터 구조를 생성할 때
size 해당 Collection의 최초 생성크기
>db.createCollection("emp",{capped:false, size:8192});

◎ colection list보기
show collections

◎ collection의 현재상태 및 정보분석
>db.emp.validate();

◎ collection의 이름변경
>db.emp.renameCollection("employee")

◎ Collection의 삭제
>db.employee.drop();

◎ collection에 데이터 INSERT
>db.emp.insert({eno:1101,fname:"JIMMY"});

◎ collection에 데이터 UPDATE
>db.emp.update({eno:1101},{$set:{fname:"JOO"}});

◎ collection에 데이터 SELECT
>db.emp.find().sort({eno:-1});

 

◎ 도큐먼트(row)부터 정의하고 collection 생성
>m={ename :  "smith"}
>n={ename :  1101}
>db.things.save(m)
>db.things.save(n)
>db.things.find()
>db.things.insert({ empno : 1102, ename:"king"})

◎ for문을 이용한 증감된 값을 Collection에 insert
>for(var n=1103; n<=1120; n++) db.things.save({n:n, m:"test"+n})

 

◎ db.things.find()로 조회시 리스트가 20 row가 넘는 경우 다음 페이지를 보고싶을때
>it

 

예제

MongoDB는 자바스크립트 엔진을 사용

>typeof({}); //object 

>typeof(1); //number

>typeof(true); // boolean

>typeof([]); // object

 

Document만들기

>student1={ name:"A", age=10 };

>student2={ name:"B", age=15 };

 

Collection만들기

>db.students.save(student1); 

>db.students.save(student2);  

 

Query

>db.students.find();

 

Query with parameter

>db.students.find( { name : "A" } );

 

Query with modifier

>db.students.find( { age : { '$gt' : 11 } } );

 

원하는 열 검색(name열만 보기) 

>db.students.find( {}, { name : true} );

 

원하는 열에 조건 주기(age가 10인 name열만 보기) 

>db.students.find( { age : "10", } { name : true } ); 

 

전체 Update

>db.students.update( { name : "A" , { name : "A", age : 1 } } ); 

 

Update

> db.students.update( { name : "A", { "$set" : { age : 11 } } );

 

삭제

>db.students.remove( { name : "A" } );

 

 

출처 : http://pacino.tistory.com/16 

'Developments > MongoDB' 카테고리의 다른 글

pymongo 도움말  (0) 2016.08.07
몽고DB 스키마 디자인  (0) 2016.08.05
몽고DB 관리툴  (0) 2016.07.30
몽고DB의 용어와 문법적 차이  (0) 2016.07.29
몽고DB 윈도우에 설치  (0) 2016.07.28

발췌: https://learnxinyminutes.com/docs/python/


 

# Single line comments start with a number symbol.

""" Multiline strings can be written
    using three "s, and are often used
    as comments
"""

####################################################
## 1. Primitive Datatypes and Operators
####################################################

# You have numbers
3  # => 3

# Math is what you would expect
1 + 1  # => 2
8 - 1  # => 7
10 * 2  # => 20
35 / 5  # => 7

# Division is a bit tricky. It is integer division and floors the results
# automatically.
5 / 2  # => 2

# To fix division we need to learn about floats.
2.0     # This is a float
11.0 / 4.0  # => 2.75 ahhh...much better

# Result of integer division truncated down both for positive and negative.
5 // 3     # => 1
5.0 // 3.0 # => 1.0 # works on floats too
-5 // 3  # => -2
-5.0 // 3.0 # => -2.0

# Note that we can also import division module(Section 6 Modules)
# to carry out normal division with just one '/'.
from __future__ import division
11/4    # => 2.75  ...normal division
11//4   # => 2 ...floored division

# Modulo operation
7 % 3 # => 1

# Exponentiation (x to the yth power)
2**4 # => 16

# Enforce precedence with parentheses
(1 + 3) * 2  # => 8

# Boolean Operators
# Note "and" and "or" are case-sensitive
True and False #=> False
False or True #=> True

# Note using Bool operators with ints
0 and 2 #=> 0
-5 or 0 #=> -5
0 == False #=> True
2 == True #=> False
1 == True #=> True

# negate with not
not True  # => False
not False  # => True

# Equality is ==
1 == 1  # => True
2 == 1  # => False

# Inequality is !=
1 != 1  # => False
2 != 1  # => True

# More comparisons
1 < 10  # => True
1 > 10  # => False
2 <= 2  # => True
2 >= 2  # => True

# Comparisons can be chained!
1 < 2 < 3  # => True
2 < 3 < 2  # => False

# Strings are created with " or '
"This is a string."
'This is also a string.'

# Strings can be added too!
"Hello " + "world!"  # => "Hello world!"
# Strings can be added without using '+'
"Hello " "world!"  # => "Hello world!"

# ... or multiplied
"Hello" * 3  # => "HelloHelloHello"

# A string can be treated like a list of characters
"This is a string"[0]  # => 'T'

#String formatting with %
#Even though the % string operator will be deprecated on Python 3.1 and removed
#later at some time, it may still be good to know how it works.
x = 'apple'
y = 'lemon'
z = "The items in the basket are %s and %s" % (x,y)

# A newer way to format strings is the format method.
# This method is the preferred way
"{} is a {}".format("This", "placeholder")
"{0} can be {1}".format("strings", "formatted")
# You can use keywords if you don't want to count.
"{name} wants to eat {food}".format(name="Bob", food="lasagna")

# None is an object
None  # => None

# Don't use the equality "==" symbol to compare objects to None
# Use "is" instead
"etc" is None  # => False
None is None  # => True

# The 'is' operator tests for object identity. This isn't
# very useful when dealing with primitive values, but is
# very useful when dealing with objects.

# Any object can be used in a Boolean context.
# The following values are considered falsey:
#    - None
#    - zero of any numeric type (e.g., 0, 0L, 0.0, 0j)
#    - empty sequences (e.g., '', (), [])
#    - empty containers (e.g., {}, set())
#    - instances of user-defined classes meeting certain conditions
#      see: https://docs.python.org/2/reference/datamodel.html#object.__nonzero__
#
# All other values are truthy (using the bool() function on them returns True).
bool(0)  # => False
bool("")  # => False


####################################################
## 2. Variables and Collections
####################################################

# Python has a print statement
print "I'm Python. Nice to meet you!" # => I'm Python. Nice to meet you!

# Simple way to get input data from console
input_string_var = raw_input("Enter some data: ") # Returns the data as a string
input_var = input("Enter some data: ") # Evaluates the data as python code
# Warning: Caution is recommended for input() method usage
# Note: In python 3, input() is deprecated and raw_input() is renamed to input()

# No need to declare variables before assigning to them.
some_var = 5    # Convention is to use lower_case_with_underscores
some_var  # => 5

# Accessing a previously unassigned variable is an exception.
# See Control Flow to learn more about exception handling.
some_other_var  # Raises a name error

# if can be used as an expression
# Equivalent of C's '?:' ternary operator
"yahoo!" if 3 > 2 else 2  # => "yahoo!"


# Lists store sequences
li = []
# You can start with a prefilled list
other_li = [4, 5, 6]

# Add stuff to the end of a list with append
li.append(1)    # li is now [1]
li.append(2)    # li is now [1, 2]
li.append(4)    # li is now [1, 2, 4]
li.append(3)    # li is now [1, 2, 4, 3]
# Remove from the end with pop
li.pop()        # => 3 and li is now [1, 2, 4]
# Let's put it back
li.append(3)    # li is now [1, 2, 4, 3] again.

# Access a list like you would any array
li[0]  # => 1
# Assign new values to indexes that have already been initialized with =
li[0] = 42
li[0]  # => 42
li[0] = 1  # Note: setting it back to the original value
# Look at the last element
li[-1]  # => 3

# Looking out of bounds is an IndexError
li[4]  # Raises an IndexError

# You can look at ranges with slice syntax.
# (It's a closed/open range for you mathy types.)
li[1:3]  # => [2, 4]
# Omit the beginning
li[2:]  # => [4, 3]
# Omit the end
li[:3]  # => [1, 2, 4]
# Select every second entry
li[::2]   # =>[1, 4]
# Reverse a copy of the list
li[::-1]   # => [3, 4, 2, 1]
# Use any combination of these to make advanced slices
# li[start:end:step]

# Remove arbitrary elements from a list with "del"
del li[2]   # li is now [1, 2, 3]

# You can add lists
li + other_li   # => [1, 2, 3, 4, 5, 6]
# Note: values for li and for other_li are not modified.

# Concatenate lists with "extend()"
li.extend(other_li)   # Now li is [1, 2, 3, 4, 5, 6]

# Remove first occurrence of a value
li.remove(2)  # li is now [1, 3, 4, 5, 6]
li.remove(2)  # Raises a ValueError as 2 is not in the list

# Insert an element at a specific index
li.insert(1, 2)  # li is now [1, 2, 3, 4, 5, 6] again

# Get the index of the first item found
li.index(2)  # => 1
li.index(7)  # Raises a ValueError as 7 is not in the list

# Check for existence in a list with "in"
1 in li   # => True

# Examine the length with "len()"
len(li)   # => 6


# Tuples are like lists but are immutable.
tup = (1, 2, 3)
tup[0]   # => 1
tup[0] = 3  # Raises a TypeError

# You can do all those list thingies on tuples too
len(tup)   # => 3
tup + (4, 5, 6)   # => (1, 2, 3, 4, 5, 6)
tup[:2]   # => (1, 2)
2 in tup   # => True

# You can unpack tuples (or lists) into variables
a, b, c = (1, 2, 3)     # a is now 1, b is now 2 and c is now 3
d, e, f = 4, 5, 6       # you can leave out the parentheses
# Tuples are created by default if you leave out the parentheses
g = 4, 5, 6             # => (4, 5, 6)
# Now look how easy it is to swap two values
e, d = d, e     # d is now 5 and e is now 4


# Dictionaries store mappings
empty_dict = {}
# Here is a prefilled dictionary
filled_dict = {"one": 1, "two": 2, "three": 3}

# Look up values with []
filled_dict["one"]   # => 1

# Get all keys as a list with "keys()"
filled_dict.keys()   # => ["three", "two", "one"]
# Note - Dictionary key ordering is not guaranteed.
# Your results might not match this exactly.

# Get all values as a list with "values()"
filled_dict.values()   # => [3, 2, 1]
# Note - Same as above regarding key ordering.

# Check for existence of keys in a dictionary with "in"
"one" in filled_dict   # => True
1 in filled_dict   # => False

# Looking up a non-existing key is a KeyError
filled_dict["four"]   # KeyError

# Use "get()" method to avoid the KeyError
filled_dict.get("one")   # => 1
filled_dict.get("four")   # => None
# The get method supports a default argument when the value is missing
filled_dict.get("one", 4)   # => 1
filled_dict.get("four", 4)   # => 4
# note that filled_dict.get("four") is still => None
# (get doesn't set the value in the dictionary)

# set the value of a key with a syntax similar to lists
filled_dict["four"] = 4  # now, filled_dict["four"] => 4

# "setdefault()" inserts into a dictionary only if the given key isn't present
filled_dict.setdefault("five", 5)  # filled_dict["five"] is set to 5
filled_dict.setdefault("five", 6)  # filled_dict["five"] is still 5


# Sets store ... well sets (which are like lists but can contain no duplicates)
empty_set = set()
# Initialize a "set()" with a bunch of values
some_set = set([1, 2, 2, 3, 4])   # some_set is now set([1, 2, 3, 4])

# order is not guaranteed, even though it may sometimes look sorted
another_set = set([4, 3, 2, 2, 1])  # another_set is now set([1, 2, 3, 4])

# Since Python 2.7, {} can be used to declare a set
filled_set = {1, 2, 2, 3, 4}   # => {1, 2, 3, 4}

# Add more items to a set
filled_set.add(5)   # filled_set is now {1, 2, 3, 4, 5}

# Do set intersection with &
other_set = {3, 4, 5, 6}
filled_set & other_set   # => {3, 4, 5}

# Do set union with |
filled_set | other_set   # => {1, 2, 3, 4, 5, 6}

# Do set difference with -
{1, 2, 3, 4} - {2, 3, 5}   # => {1, 4}

# Do set symmetric difference with ^
{1, 2, 3, 4} ^ {2, 3, 5}  # => {1, 4, 5}

# Check if set on the left is a superset of set on the right
{1, 2} >= {1, 2, 3} # => False

# Check if set on the left is a subset of set on the right
{1, 2} <= {1, 2, 3} # => True

# Check for existence in a set with in
2 in filled_set   # => True
10 in filled_set   # => False


####################################################
## 3. Control Flow
####################################################

# Let's just make a variable
some_var = 5

# Here is an if statement. Indentation is significant in python!
# prints "some_var is smaller than 10"
if some_var > 10:
    print "some_var is totally bigger than 10."
elif some_var < 10:    # This elif clause is optional.
    print "some_var is smaller than 10."
else:           # This is optional too.
    print "some_var is indeed 10."


"""
For loops iterate over lists
prints:
    dog is a mammal
    cat is a mammal
    mouse is a mammal
"""
for animal in ["dog", "cat", "mouse"]:
    # You can use {0} to interpolate formatted strings. (See above.)
    print "{0} is a mammal".format(animal)

"""
"range(number)" returns a list of numbers
from zero to the given number
prints:
    0
    1
    2
    3
"""
for i in range(4):
    print i

"""
"range(lower, upper)" returns a list of numbers
from the lower number to the upper number
prints:
    4
    5
    6
    7
"""
for i in range(4, 8):
    print i

"""
While loops go until a condition is no longer met.
prints:
    0
    1
    2
    3
"""
x = 0
while x < 4:
    print x
    x += 1  # Shorthand for x = x + 1

# Handle exceptions with a try/except block

# Works on Python 2.6 and up:
try:
    # Use "raise" to raise an error
    raise IndexError("This is an index error")
except IndexError as e:
    pass    # Pass is just a no-op. Usually you would do recovery here.
except (TypeError, NameError):
    pass    # Multiple exceptions can be handled together, if required.
else:   # Optional clause to the try/except block. Must follow all except blocks
    print "All good!"   # Runs only if the code in try raises no exceptions
finally: #  Execute under all circumstances
    print "We can clean up resources here"

# Instead of try/finally to cleanup resources you can use a with statement
with open("myfile.txt") as f:
    for line in f:
        print line


####################################################
## 4. Functions
####################################################

# Use "def" to create new functions
def add(x, y):
    print "x is {0} and y is {1}".format(x, y)
    return x + y    # Return values with a return statement

# Calling functions with parameters
add(5, 6)   # => prints out "x is 5 and y is 6" and returns 11

# Another way to call functions is with keyword arguments
add(y=6, x=5)   # Keyword arguments can arrive in any order.


# You can define functions that take a variable number of
# positional args, which will be interpreted as a tuple by using *
def varargs(*args):
    return args

varargs(1, 2, 3)   # => (1, 2, 3)

# You can define functions that take a variable number of
# keyword args, as well, which will be interpreted as a dict by using **
def keyword_args(**kwargs):
    return kwargs

# Let's call it to see what happens
keyword_args(big="foot", loch="ness")   # => {"big": "foot", "loch": "ness"}


# You can do both at once, if you like
def all_the_args(*args, **kwargs):
    print args
    print kwargs
"""
all_the_args(1, 2, a=3, b=4) prints:
    (1, 2)
    {"a": 3, "b": 4}
"""

# When calling functions, you can do the opposite of args/kwargs!
# Use * to expand positional args and use ** to expand keyword args.
args = (1, 2, 3, 4)
kwargs = {"a": 3, "b": 4}
all_the_args(*args)   # equivalent to foo(1, 2, 3, 4)
all_the_args(**kwargs)   # equivalent to foo(a=3, b=4)
all_the_args(*args, **kwargs)   # equivalent to foo(1, 2, 3, 4, a=3, b=4)

# you can pass args and kwargs along to other functions that take args/kwargs
# by expanding them with * and ** respectively
def pass_all_the_args(*args, **kwargs):
    all_the_args(*args, **kwargs)
    print varargs(*args)
    print keyword_args(**kwargs)

# Function Scope
x = 5

def set_x(num):
    # Local var x not the same as global variable x
    x = num # => 43
    print x # => 43

def set_global_x(num):
    global x
    print x # => 5
    x = num # global var x is now set to 6
    print x # => 6

set_x(43)
set_global_x(6)

# Python has first class functions
def create_adder(x):
    def adder(y):
        return x + y
    return adder

add_10 = create_adder(10)
add_10(3)   # => 13

# There are also anonymous functions
(lambda x: x > 2)(3)   # => True
(lambda x, y: x ** 2 + y ** 2)(2, 1) # => 5

# There are built-in higher order functions
map(add_10, [1, 2, 3])   # => [11, 12, 13]
map(max, [1, 2, 3], [4, 2, 1])   # => [4, 2, 3]

filter(lambda x: x > 5, [3, 4, 5, 6, 7])   # => [6, 7]

# We can use list comprehensions for nice maps and filters
[add_10(i) for i in [1, 2, 3]]  # => [11, 12, 13]
[x for x in [3, 4, 5, 6, 7] if x > 5]   # => [6, 7]


####################################################
## 5. Classes
####################################################

# We subclass from object to get a class.
class Human(object):

    # A class attribute. It is shared by all instances of this class
    species = "H. sapiens"

    # Basic initializer, this is called when this class is instantiated.
    # Note that the double leading and trailing underscores denote objects
    # or attributes that are used by python but that live in user-controlled
    # namespaces. You should not invent such names on your own.
    def __init__(self, name):
        # Assign the argument to the instance's name attribute
        self.name = name

        # Initialize property
        self.age = 0


    # An instance method. All methods take "self" as the first argument
    def say(self, msg):
        return "{0}: {1}".format(self.name, msg)

    # A class method is shared among all instances
    # They are called with the calling class as the first argument
    @classmethod
    def get_species(cls):
        return cls.species

    # A static method is called without a class or instance reference
    @staticmethod
    def grunt():
        return "*grunt*"

    # A property is just like a getter.
    # It turns the method age() into an read-only attribute
    # of the same name.
    @property
    def age(self):
        return self._age

    # This allows the property to be set
    @age.setter
    def age(self, age):
        self._age = age

    # This allows the property to be deleted
    @age.deleter
    def age(self):
        del self._age


# Instantiate a class
i = Human(name="Ian")
print i.say("hi")     # prints out "Ian: hi"

j = Human("Joel")
print j.say("hello")  # prints out "Joel: hello"

# Call our class method
i.get_species()   # => "H. sapiens"

# Change the shared attribute
Human.species = "H. neanderthalensis"
i.get_species()   # => "H. neanderthalensis"
j.get_species()   # => "H. neanderthalensis"

# Call the static method
Human.grunt()   # => "*grunt*"

# Update the property
i.age = 42

# Get the property
i.age # => 42

# Delete the property
del i.age
i.age  # => raises an AttributeError


####################################################
## 6. Modules
####################################################

# You can import modules
import math
print math.sqrt(16)  # => 4

# You can get specific functions from a module
from math import ceil, floor
print ceil(3.7)  # => 4.0
print floor(3.7)   # => 3.0

# You can import all functions from a module.
# Warning: this is not recommended
from math import *

# You can shorten module names
import math as m
math.sqrt(16) == m.sqrt(16)   # => True
# you can also test that the functions are equivalent
from math import sqrt
math.sqrt == m.sqrt == sqrt  # => True

# Python modules are just ordinary python files. You
# can write your own, and import them. The name of the
# module is the same as the name of the file.

# You can find out which functions and attributes
# defines a module.
import math
dir(math)

# If you have a Python script named math.py in the same
# folder as your current script, the file math.py will 
# be loaded instead of the built-in Python module. 
# This happens because the local folder has priority
# over Python's built-in libraries. 


####################################################
## 7. Advanced
####################################################

# Generators help you make lazy code
def double_numbers(iterable):
    for i in iterable:
        yield i + i

# A generator creates values on the fly.
# Instead of generating and returning all values at once it creates one in each
# iteration.  This means values bigger than 15 wont be processed in
# double_numbers.
# Note xrange is a generator that does the same thing range does.
# Creating a list 1-900000000 would take lot of time and space to be made.
# xrange creates an xrange generator object instead of creating the entire list
# like range does.
# We use a trailing underscore in variable names when we want to use a name that
# would normally collide with a python keyword
xrange_ = xrange(1, 900000000)

# will double all numbers until a result >=30 found
for i in double_numbers(xrange_):
    print i
    if i >= 30:
        break


# Decorators
# in this example beg wraps say
# Beg will call say. If say_please is True then it will change the returned
# message
from functools import wraps

def beg(target_function):
    @wraps(target_function)
    def wrapper(*args, **kwargs):
        msg, say_please = target_function(*args, **kwargs)
        if say_please:
            return "{} {}".format(msg, "Please! I am poor :(")
        return msg

    return wrapper

@beg
def say(say_please=False):
    msg = "Can you buy me a beer?"
    return msg, say_please

print say()  # Can you buy me a beer?
print say(say_please=True)  # Can you buy me a beer? Please! I am poor :(



'Deprecated > Python' 카테고리의 다른 글

아나콘다 업데이트 방법  (0) 2016.10.06
파이썬 클래스에서 private 변수 및 함수 사용하기  (0) 2016.08.12
Protocol Buffer를 Json으로 변환  (0) 2016.08.11
pymongo 설치  (0) 2016.07.29
파이썬 설치  (0) 2016.07.28

* 몽고DB란

몽고DB는 스키마 없이 JSON형태로 정보를 저장하는 데이타베이스이다.

보다 많은 정보 [바로가기]


* 설치 방법

  1. [몽고DB 다운로드]에서 운영체제에 맞는 커뮤니티 버전 바이너리를 다운로드 하고 설치한다.
  2. 윈도우 환경변수에 등록해 준다.
    [윈도우 환경변수 등록 방법]
  3. DB가 저장되는 기본폴더를 만들어준다.
    $mkdir c:\data\db
  4. 몽고DB 서버를 실행한다.
    $mongod.exe
  5. 몽고DB가 잘 동작하는지 확인한다.
    $mongo.exe
    기본 test 데이터베이스에 연결 성공되면 잘 동작하고 있는 것 이다.

* 다른 DB PATH를 원할 경우

  1. 원하는 DB 폴더를 만든다.
    $mkdir c:\db
  2. 몽고DB 서버를 실행할 때 DB가 저장되길 원하는 PATH를 함께 넣어준다.
    $mongod --dbpath c:\db\
* 윈도우 서비스에 등록
매번 윈도우 부팅시 마다 몽고DB를 실행한다는 것은 여간 귀찮지 않을 수 없다.
윈도우 서비스에 등록하여 부팅시 마다 자동으로 실행 되도록 한다.

등록

$ mongod.exe --install --serviceName MongoDB --serviceDisplayName MongoDB --serviceDescription "MongoDB Service" --serviceUser MongoDBAdmin --servicePassword 비밀번호 --dbpath D:\MongDB\data\db --port 27017 --logpath D:\MongDB\log\mongoDB.log


제거

$ mongod --remove --serviceName MongoDB 


* 실행 오류
만약 두번째 실행 이후로 DB서버가 실행이 되지 않는다면 dbpath안에 mongod.lock 파일을 제거하고 서버를 다시 실행하면 된다.


참고: https://docs.mongodb.com/manual/tutorial/install-mongodb-on-windows/

'Developments > MongoDB' 카테고리의 다른 글

pymongo 도움말  (0) 2016.08.07
몽고DB 스키마 디자인  (0) 2016.08.05
몽고DB 관리툴  (0) 2016.07.30
몽고DB의 용어와 문법적 차이  (0) 2016.07.29
몽고DB 명령어  (0) 2016.07.29

* 파이썬 설치

파이썬 설치 방법은 두가지로 구분됨

  1. 파이썬 공식 홈페이지에서 제공하는 설치 파일 (파이썬 인터프리터)
  2. 배포판이라고 불리는 설치 파일 (파이썬 인터프리터 + 파이썬 패키지)
유명한 배포판들은 다음과 같다.

배포판 이름주소
Anacondahttps://store.continuum.io/cshop/anaconda/
Python(x,y)https://code.google.com/p/pythonxy/
Enghought Canopyhttps://www.enthought.com/products/epd/
WinPythonhttp://winpython.github.io/

필요한 라이브러리들을 따로 설치하기 번거로우므로 Anaconda 배포판을 설치한다.

https://www.continuum.io/downloads

※ 국내 증권사에서 제공하는 API를 정상적으로 이용하려면 반드시 32bit용으로 설치해야 한다.


* 파이썬 IDE 설치

파이썬 프로젝트 관리와 디버깅을 위한 IDE를 설치한다.


유명한 IDE들은 다음과 같다.

IDE 이름주소
PyCharmhttps://www.jetbrains.com/pycharm/download
Python Tools Visual Studiohttp://microsoft.github.io/PTVS/
PyDev for Eclipsehttp://www.pydev.org/

별도의 툴 설치가 필요없는 PyCharm을 설치한다.

(무료와 유료버전이 있는데 무료버전 만으로도 충분하다.)


시가총액이 큰 종목일 수록 공매도의 분석이 중요해 진다.

대차/공매도 거래내역은 아래 사이트에서 확인 할 수 있다.


http://freesis.kofia.or.kr/


주식>주식대차거래내역>대차거래추이>종목선택>조회

'Finance' 카테고리의 다른 글

중요 이평선별 시간 계산표  (0) 2021.02.08
코스피 상장폐지 요건 요약  (0) 2020.05.29
코스피, 코스닥 및 기타 상품 규정  (0) 2016.08.09
공시 정보 얻기  (0) 2016.07.28

* 머신러닝 라이브러리 정리

https://github.com/josephmisiti/awesome-machine-learning#c-general-purpose


용도와 성향에 맞추어 사용하도록 한다.

주식 투자시 재료의 크기와 시기를 판단하는데에 있어 공시는 매우 중요하다.

아래 사이트에서 공시를 확인 해 볼 수 있다.


http://dart.fss.or.kr/

http://kind.krx.co.kr/

네이버>증권정보>전자공시


dart같은 경우는 모바일앱을 설치하면 직접 매번 찾아보지 않더라도 공시가 등록되는 순간 푸쉬서비스로 빠르게 정보를 받아 볼 수 있다.

'Finance' 카테고리의 다른 글

중요 이평선별 시간 계산표  (0) 2021.02.08
코스피 상장폐지 요건 요약  (0) 2020.05.29
코스피, 코스닥 및 기타 상품 규정  (0) 2016.08.09
대차/공매도 거래내역 조회  (0) 2016.07.28

* 장외시장 커뮤니티

http://www.38.co.kr/


이곳에서도 거래가 가능하나 거래자가 직접 만나야 하기 때문에 거리 및 안정성 문제가 야기된다.

때문에 수수료가 들더라도 k-otcbb를 통해 하는것이 좋다.


* 장외 주식 거래

http://k-otcbb.or.kr/

http://www.k-otc.or.kr/


1. O T C B B란

Over The Counter Bulletin Board 의 약자로 한국증권업협회가 운영하는 비상장, 비등록 장외주식 호가중개 시스템


2. OTC BB 매매가능계좌 

가. 위탁계좌 

나. 위탁공동계좌 : 입고 후 매도만 가능, 매수는 불가

다. 종합통장계좌 : 2000년 4월 가능 예정

라. 증권저축계좌 :매매불가


3. OTCBB종목의 매매방법 


가. 위탁증거금

1) 위탁계좌, 위탁공동계좌 : 약정금액 기준 100%

(매수인 경우에는 현금, 매도인 경우에는 당해 유가증권)

2) 종합통장계좌 : 정산금액(약정금액 + 수수료) 기준 100%

(매수인 경우에는 현금, 매도인 경우에는 당해 유가증권)

3) 위탁증거금 산정시 주의사항

- 증거금 재사용 불가

- OTC BB 종목의 매도체결분을 수도결제전에 

상장주식 또는 코스닥주식, OTC BB 종목의 매수증거금으로 재사용 불가

- 매수체결된 OTC BB 종목은 수도결제전 매도할 수 없고, 수도결제후에만 매도 가능


나. 가격제한폭 및 호가 단위

1) 가격제한폭 : 없음. (상한가, 하한가 없음)

2) 호가 단위 (예 : 50,300원 주문 가능하지만 50,350원은 주문 불가) 


주 문 가 격 호가 단위

10,000원 미만 10원 

10,000원 이상 50,000원 미만 50원

50,000원 이상 100,000원 미만 100원

100,000원 이상 500,000원 미만 500원

500,000원 이상 1,000원



3) 호가 수량 단위 : 1주 (예 : 123주 주문 가능)

4) 매매기준가격

- 가격제한폭이 없기 때문에 주문가격에 영향을 미치지는 않지만 종가 대신 

매매기준으로 제시되는 가격


다. 호가 구분 및 주문, 매매체결 방법

1) 호가 구분 


호가 구분 용 도

분할거래호가 호가 수량(주문 수량)이 분할되어 거래될 수 있는 호가

전량거래호가 호가 수량(주문 수량) 전량이 일시에 거래되기를 고객이 

요구하는 호가

전량거래호가인 경우 해당 주문에 상대되는 주문 1건에

matching 되는 경우에 한하여 체결 가능(예 : 매도주문이

전량거래호가인 경우 동일 수량의 전량거래호가인 매수

주문 1건 또는 매도 주문수량 이상의 분할거래호가인 매수

주문 1건에 체결 가능)


2) 매매체결 방법

- 매도, 매수 주문가격이 일치하는 경우에만 체결 가능하며, 

체결가능한 주문이 복수인 경우 먼저 

접수된 주문이 우선함.

- 매도 주문가격 30,000원, 매수 주문가격 50,000원인 경우 

매수 주문가격이 높더라도 체결되지 않음.

- 호가 구분별 체결방법 (매도, 매수 주문가격은 10,000원으로 동일한 경우)



매 도 주 문 매 수 주 문 체 결 수 량

전량거래호가 전량거래호가

1,000주 1,000주 1,000주 체결


전량거래호가 전량거래호가 체결 불가 (매수주문 전량거래호가 불충족)

1,500주 1,000주


전량거래호가 전량거래호가 500주 체결 불가

1,000주 전량거래호가 500주 (매도 주문수량과 매수 주문수량은 일치

하지만 매도주문 1건에 매수 주문 1건이 

대응되지 않기 때문에 체결 불가)


전량거래호가 분할거래호가

1,000주 1,000주 1,000주 체결


전량거래호가 분할거래호가

1,000주 1,500주 1,000주 체결되며, 매수 잔량 500주


전량거래호가 분할거래호가 500주 체결 불가

1,000주 분할거래호가 500주 (매도 주문수량과 매수 주문수량은 일치

하지만 매도주문 1건에 매수 주문 1건이

대응되지 않기 때문에 체결 불가)

분할거래호가 분할거래호가 

1,000 1,500주 1,000주 체결되며, 매수 잔량 500주


분할거래호가 분할거래호가 1,500주 1,000주 체결되며, 매수 잔량 1,800주

1,000주 분할거래호가 1,300주 1,000주 체결되며, 매수 잔량 1,800주


분할거래호가 분할거래호가 300주

1,000주 분할거래호가 500주 800주 체결되며, 매도 잔량 200주



라. 주문가능 시간, 예약주문 전달 및 수도결제

1) 주문가능 시간 : 9시부터 15시 

2) 예약주문 접수 및 주문 전달

- 당일 07:45 까지 접수된 예약주문은 당일 09:00 에 주문전달하며,

- 당일 07:45 이후부터 익영업일 07:45 까지 접수된 예약주문은 

익 영업일 09:00에 주문 전달함.

3) 수도결제 : 3일 결제 (상장주식, 코스닥주식의 수도결제와 동일)


4. OTCBB종목의수수료 및 제세금 


(1). OTC BB 종목에 대한 증권거래세 : 매도 약정금액의 0.5%


(2). OTC BB 종목에 대한 수수료 -코스닥과 동일


구 분 약 정 금 액 수 수 료 율

창구 주문 - 0.4%

HTS 주문 1천만원 미만 0.2%

1천만원 이상 2천만원 미만 0.1%

2천만원 이상 1억원 미만 0.08%

1억원 이상 0.06%


(3). OTC BB 종목에 대한 양도차익 과세

1) 비거주자

- 매도시 양도차익에 대하여 거주국과의 조세협약 세율(또는 제한세율)을 

적용하여 당사에서 원천징수

- 현행 주식양도차익에 대한 과세와 동일하게 처리

2) 거주자

- 납세 의무자 : 해당월의 월간차액을 합산하여 익익월말까지 

고객이 개별적으로 세무당국에 신고하여야 함.

- 양도소득세율 : 대기업 주식인 경우 양도차익의 20%, 

중소기업 주식인 경우 양도차익의 10%




+ Recent posts