python: mysql DB query 요청

안녕하세요. 제이콥입니다.


이번 글에서는 python으로 mysql db에 접근, query를 요청하는 것에 대해 정리를 해봤습니다.


다른걸로 공부하시다 이렇게 사용할 수 있구나 정도.. 보시면 될 것 같습니다.




이전 글에서는 mysql-workbench를 설치했었습니다.

mysql-workbench를 설치하고 싶다면 아래 글을 봐보세요.

-> https://busy.org/@jacobyu/1535-mysql-db-workbench-setup-vultr-ubuntu

설치를 한 후, schema와 table을 생성해야하는데요.


이 생성과정은 mysql-workbench에서 하면 아주 편합니다.


UI에서 테이블 이름, 필드 이름, 타입 등을 넣어주면 됩니다.


그러면 자동으로 mysql query 문이 생성됩니다.


image.png




이제 파이썬으로 mysql을 다뤄보겠습니다.


먼저 pymysql 라이브러리를 설치합니다.


pip install pymysql




설치 다하셨나요? ㅎㅎ


제가 작성한 코드로 설명해보겠습니다.


저는 object map라는 테이블을 만들었고 object를 테이블에 넣고 지우고 업데이트하고 가져오는 작업을 해봤습니다.




먼저 특정 db의 schema에 연결을 합니다.


연결이 되면 이 conn이라는 객체를 이용해서 여러 query를 수행합니다.


DB가 설치된 서버 host name,


DB에 접근할 user명, 비밀번호,


Schema 등을 입력합니다.




def initDB(self):
conn = pymysql.connect(
host= ‘test.net’,
user= ‘test’,
password= ‘test_pw’,
db= ‘your_schema’,
charset= ‘utf8mb4’)
return conn



아래 함수는 select로 테이블 내의 값들을 가져와서


Object라는 객체에 값을 채워넣는 일을 합니다.


이 코드에서는 처음에 정의한 initDB로 connection을 한 후, 쿼리를 수행하는 것을 볼 수 있습니다.

    def loadObjectMap(self):
        conn = self.initDB()
        result = None
        try:
            with conn.cursor() as cursor:
                sql = 'SELECT * FROM ObjectMap'
                cursor.execute(sql)
                result = cursor.fetchall()
                # print(result)
        except Exception as e:
            print('I got error on search table')
            conn.close()
        conn.close()
        objectArray = []
        for object_quary in result:
            obj = Object()
            obj.id = object_quary[0] # auto id
            obj.tag = object_quary[2]
            obj.tagName = object_quary[3]
            obj.directionX = object_quary[4]
            obj.directionY = object_quary[5]
            obj.directionZ = object_quary[6]
            objectArray.append(obj)
        return objectArray

아래 함수들은 물체를 지우고, 넣고, 업데이트 하는 함수들입니다.




def delete_object(self, auto_id): #delete an object which has auto_id
pass # DELETE FROM athena.ObjectMap WHERE AI_ID=’15’;
conn = self.initDB()
try:
with conn.cursor() as cursor:
sql = ‘DELETE FROM ObjectMap WHERE AI_ID = %s’
cursor.execute(sql, (auto_id))
conn.commit()
print(‘I successed on deleting ID’)
except Exception as e:
print(‘I got error on deleting ID’)
print(e)
conn.close()
conn.close()

def insert_object(self, obj): # insert new object to DB
# obj.id, obj.tag, obj.tagName, obj.directionX, obj.directionY, obj.directionZ
conn = self.initDB()
try:
with conn.cursor() as cursor:
# print obj
sql = ‘INSERT INTO ObjectMap (objectMapID, tagID, name, directionX, directionY, directionZ) VALUES (%s, %s, %s, %s, %s, %s)’
cursor.execute(sql, (obj.id, obj.tag, obj.tagName, obj.directionX, obj.directionY, obj.directionZ))
conn.commit()
print(‘I successed on inserting ID’)
except Exception as e:
print(‘I got error on inserting ID’)
print(e)
conn.close()
return 0
conn.close()
return 1

def update_object(self, updateID, obj): # update obj info to another object which has updateID.
# self.update_object(obj.id, obj.directionX, obj.directionY, obj.directionZ)
conn = self.initDB()
try:
with conn.cursor() as cursor:
sql = ‘UPDATE ObjectMap SET tagID = %s, name = %s, directionX = %s, directionY = %s, directionZ = %s WHERE AI_ID = %s’
cursor.execute(sql, (obj.tag, obj.tagName, obj.directionX, obj.directionY, obj.directionZ, updateID))
conn.commit()
print(‘I successed on updating ID’)
except Exception as e:
print(‘I got error on updating ID’)
print(e)
conn.close()
conn.close()


끝!


감사합니다.


This page is synchronized from the post: ‘python: mysql DB query 요청’

Tyche - The most intelligent AI robot toy

Tyche

The most intelligent AI robot toy


Screenshots

411bb3da628d74919c5d1f62974f12d6.jpeg
713b5c01bf368370e4de4326dd07817b.jpeg
View Image
c632c77c0bc2cd7c2b2ecb4e30a11d75.jpeg
View Image

Hunter’s comment

Hi!

I wanna share with you a product named Tyche.

Tyche is an AI companion robot using a smartphone as its brain.

According to the website, Tyche has some features.

  • A conversational agent directed towards achieving true AI capabilities
  • Intelligent robot able to learn who the owner is through self disclosure.
  • Builds its own memory of events and conversations through multi-modal spatial sensory including audio and visual perceptions
  • Reasons and solves problems via planning based on the episodic memory built.

When I used Tyche, I was surprised that Tyche remembered what I said and answered questions based on robot memory.

I think Tyche is an affordable robot for giving children a chance to experience AI.

I added a video “Tyche AI Learning Robot for Kids”.
https://www.youtube.com/watch?v=IcduVtArZFU

Thank you.


https://tyche.club/shop/tyche-classic-type/



Steemhunt.com

This is posted on Steemhunt - A place where you can dig products and earn STEEM.
View on Steemhunt.com

This page is synchronized from the post: ‘Tyche - The most intelligent AI robot toy’

mysql DB, mysql-workbench setup on Ubuntu (Vultr 호스팅)

안녕하세요. 제이콥입니다.

mysql-workbench를 이용하여 mysqlDB 원격 접속을 위한 설정에 대해 적어봤습니다.

전에 한번 했었는데, 다시 하려니 기억이 안나더라고요. 그래서 정리하게 됐습니다.

먼저 mysql DB 셋업 과정, 그리고 방화벽 port 관련 설정, mysql-workbench 설치 및 설정 등을 할 것입니다.


제 환경은 우분투이고, vultr 가상 호스팅 서버입니다. (서버가 우분투환경이면 저랑 똑같이 하면 됩니다.)

Vultr에 대해 궁금하시면 아래 글을 봐보세요!

https://steemit.com/kr-dev/@jacobyu/vultr

순서대로 시작해보겠습니다.


Vultr 내에서 셋팅 #0 db 계정 생성

ssh로 접속을 합니다. 아래 계정이름과 ip는 임의로 적어봤습니다.

ssh testid@123.123.55.123

이미 워드프레스는 설치를 했다면, mysql은 같이 설치되어있습니다.

mysql 계정을 하나 만들어보겠습니다.

먼저 루트 계정으로 접속합니다. 처음에 mysql를 설치할 때 정했던 아이디와 비밀번호를 입력합니다.

계정을 생성합니다. ‘test’ 는 아이디, 그리고 ‘12345678’은 비밀번호입니다.

mysql -u root -p

use mysql;

create user ‘test‘@’%’ identified by ‘12345678‘;

계정을 생성한 다음에 잘 생성됐는지 확인합니다.

select user from user;

다음으로, 권한을 주는 것을 깜빡했는데요.

권한을 줘야합니다. 외부에서 mysql-workbench로 접속을 해서 쉽게 변경을 할 수 있도록이요.

grant all privileges on . to ‘test’@’%’ ideintified by ‘12345678’;

flush privileges;


Vultr 내에서 셋팅 #1 방화벽 db 접근 port 열기

또한 외부에서 접속하기 위해서는 port를 열어줘야합니다.

ufw를 설치합니다. ufw는 쉽게 포트를 설정할 수 있도록 해줍니다.

설치 후, 상태를 한번 봅니다.

어떤 포트가 열려있고 닫혀있는지 적혀있습니다.

sudo ufw status verbose

다음으로는, mysql접근을 위한 3306 포트를 엽니다 (기본이 3306). 혹은, 자신만의 포트로 변경을 해도됩니다.

sudo ufw allow 3306


Window PC #0 MYSQL workbench 설치 및 셋팅

https://dev.mysql.com/downloads/workbench/에서 다운로드합니다.

다운로드 후, manage connection을 들어가서 해당 서버의 ip/혹은 domain 그리고 db ID/pw를 입력하면 끝!

그리고 실제로 연결해보시면 됩니다.

image.png

image.png

mysql workbench 장점으로는

DB를 GUI에서 보고 수정가능하고, 커맨드로 날려보고 여기 하나에서 다해볼 수 있습니다.

여기까지 따라오시면서 주의해야할점은

계정의 권한 확인, 방화벽 포트 확인이 있습니다.


자! 정리를 간단히 해봤습니다!

다음 글에서는 이어서 테이블도 만들어보고 파이썬에서 접근도 해볼 예정입니다.

감사합니다.




### Originally posted on Story of Jacob. Steem blog powered by ENGRAVE.

This page is synchronized from the post: ‘mysql DB, mysql-workbench setup on Ubuntu (Vultr 호스팅)’

Last test...

test


https://steemd.com/diary/@jacobyu/1510-last-test








{“tags”:[“diary”,”test”],”image”:[],”link”:[],”category”:”{\”id\”:\”5c10aed31a9941001ab1510\”,\”steem_tag\”:\”diary\”,\”slug\”:\”diary\”,\”name\”:\”diary\”}”,”app”:”engrave/0.1″,”format”:”markdown”,”domain”:”passionbull.engrave.site”}

요래 나오네.


category_json = JSON.stringify({

id: ‘5c10aed31a9941001ab’+(wpsePost.Post_ID),

steem_tag: tag_array[0],

slug: tag_array[0],

name: tag_array[0]})

console.log(category_json);


stringify 때문인 것 같다.


ㅜㅜ



### Originally posted on Story of Jacob. Steem blog powered by ENGRAVE.

This page is synchronized from the post: ‘Last test…’

[후기] Engrave - 스팀 기반 블로그

Engrave라는 괜찮은 스팀기반 블로그가 나왔습니다. test


스팀에서 글을 작성하고 이전 글을 찾아보기도 힘들고, 분류도 못하는게 맘에 안들는데


Engrave를 통해, 스팀 글을 자신만의 블로그에서 볼 수 있으며, 분류가 가능합니다.


장점



  • https://engrave.website/에서 3분이면 나만의 블로그를 만들 수 있다.

  • 이 블로그에서 글을 쓰면, 스팀에 올라간다. 그리고 보상을 받을 수 있다.

  • 분류가 가능하다.

  • 개인적인 생각으로는 구글 애드센스도 붙일 수 있을 것 같다. 내 웹페이지니깐?

    • 헤드에다가 구글 애드센스 넣으면 되지 않을까..



  • 스팀잇 아이디만 있다면 쉽게 나만의 블록체인 블로그를 만들 수 있다.

    • 즉, 테이스팀이나 트립스팀, busy.org처럼 이 블로그도 스팀잇에 작성된 글, 댓글들을 모두 가져온다.



  • 도메인 등록, 웹마스터 등록, 분석 툴 등록, 알람 서비스 등 여러가지 붙일 수 있도록 해놨다.


단점



  • 저자 수익의 15퍼를 가져간다. 이정도 장점이면 사용할만하긴 할 것 같다. 그래도 아깝다.

  • 이전 글들을 가져오지 못한다. 오직 engrave에서 작성한 글들만 가져온다.

    • 이건 engrave에서 못하게 막아놓은 것 같다.

    • 이전 글들을 가져오게 한다면 busy에서 글을 쓰고, engrave에서 글을 분류해서 보고 그러면 좋겠는데 말이다.




단점보다는 장점이 많고, 이제 시작해서 충분히 좋은 서비스가 될 것 같습니다.


특히, 이전 글만 가져오게 해준다면 내 글들을 분류해볼 수 있고 좋을 것 같습니다.


아래는 engrave에서 만든 내 블로그입니다.


diary와 movie로 분류해봤습니다.


https://passionbull.engrave.site/





어떻게 하면 busy에서 작성한 글들을 engrave에 올릴 수 있을까? 를 고민하다가


조금 테스트를 해봤습니다.


steemd에서 일단 글에 속성을 살펴봤습니다.


json_metadata에 engrave에서 추가적으로 넣은 속성값들이 보이더군요.


그래서 이 부분을 추가해서 글을 작성하면 engrave에도 보이지 않을까?


이 값들을 넣어서 한번 글을 작성해보려고요.


image.png




https://github.com/wise-team/engrave/blob/1a9ef8db2abdcf465e08b7b916d7231a02e63f9b/engrave/public/js/posts.js


https://github.com/wise-team/engrave/blob/164e12f40624f5bc24617e581a6015c2a5d01d7b/engrave/src/routes/dashboard/posts.ts


https://github.com/wise-team/engrave/blob/335bbfb0b7766d6877a76cb3892a1a7d5a6646bb/engrave/src/modules/Utils.ts


https://github.com/wise-team/engrave/blob/335bbfb0b7766d6877a76cb3892a1a7d5a6646bb/engrave/src/modules/Utils.ts#L41-L53




This page is synchronized from the post: ‘[후기] Engrave - 스팀 기반 블로그’

diary test 3

test test


This page is synchronized from the post: ‘diary test 3’

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×