개발/PYTHON

파이썬 Python플라스크 Flask .. def 함수 이용 라인줄이기

Aireee 2021. 4. 24. 18:04
300x250
반응형

익숙하지 않은 프로그래밍 언어를 사용한다는 건 정말 쉬운일이 아닌 것 같다.

열심히 유튜브를 보면서 파이썬과 플라스크를 겉핥기만 한 상태에서 홈페이지를 작업중인데

사실, 안해도 되는걸 해보겠다고 구지 시도했으나 에러가 발생했다. 이렇게도 저렇게도 계속 바꿔도 해결되지 않는다.

아마도, 난 파이썬의 규칙 중 일부를 명확히 이해하고 있지 않은 듯 싶다.

내가 씨름하고 있는 부분은 소스를 재활용 하기 위해서 def 함수를 하나 만들고, 다른 def 함수 내에서 사용을 시도 했는데, 안된다.

PHP 와는 뭔가 다른 듯 싶다.

내가 타이핑 한 소스는 아래와 비슷하다. (숫자는 보기 좋으라고 표시했다)

1  def mmm(a, b, c, d, e):
2      conn = sqlite3.connect(a)
3      c = conn.cursor()
4      sql = "select from ? where ? = ?"
5      c.execute(sql, (b, c, d))
6      conn.commit()
7      conn.close()
8      return redirect(url_for(e))
9
10 @app.route("/bbb", methods=['GET','POST])
11 def bbb():
12     if request.method == 'GET':
13         d = request.args['d']
14         mmm(a, b, c, d, e)

에러가 발생하는데, 뭐가 문제인지 정확히 모르겠어서 살짝 살짝 이렇게도 저렇게도 바꿔 봤지만 모두 실패하고 말았다.

? 를 %s 로 바꿔 보기도 하고, 괄호 안에 , 쉼표를 하나 더 찍어줘보기도 했다.

이래도 저래도 안된다. 일단, 그냥 하던대로 하는게 좋겠다.

저게 성공하면 소스가 조금 많이 줄어들듯 싶은데.... 아쉽다.

뭐 시간은 많으니, 분명 나중에는 방법을 찾아낼 수 있을 것이라 생각한다.

지금은 아니어도...

728x90

며칠 후...

조금은 python 과 flask 에 대한 지식이 업그레이드 된 상태. 처음에 원했던 것과는 좀 다르지만 아래와 같이 고치니 가능해졌다.

4번째 줄의 sql 문은 아에 작성시 변수를 + 로 연결하니 문제가 해결되었다.

5번째 줄은 변수를 받는 부분 마지막 변수뒤에 , 쉼표를 붙였다. 튜플이어서 꼭 이렇게 해야한다고 한다

6번째 줄의 commit() 은 select 문이기 때문에 불필요해서 제거했다. 대신 fetchall 로 데이터를 모두 가져와 data 에 넣었다.

8번째 줄의 redirect 는 그냥 data 를 리턴하는 식으로 고쳤다. (redirect 도 될 수도 있지만, 불필요해졌다)

14번째 줄도 당연히 data 라는 변수에 mmm 함수의 결과 데이터를 담도록 처리했다.

15번째 줄은 vvv.html 값을 부르라는 뜻

1  def mmm(a, b, c, d):
2      conn = sqlite3.connect(a)
3      c = conn.cursor()
4      sql = "select from " + b + " where " + c = " + d
5      c.execute(sql, (b, c, d,))
6      data = c.fetchall()
7      conn.close()
8      return data
9
10 @app.route("/bbb", methods=['GET','POST])
11 def bbb():
12     if request.method == 'GET':
13         d = request.args['d']
14         data = mmm(a, b, c, d)
15         return render_template('vvv.html')

효과적인지 여부는 모르겠으나, 일단 소스의 줄을 줄이는 효과는 있다고 본다.

기존 함수 내에서 작업하면 6개의 줄이지만 별도 함수로 뽑아 8개의 줄을 추가 되었지만, 기존 함수 내에는 1줄이 되어 간편해졌다

이제 쿼리문을 다 두드려 넣지 않아도 된다.

비슷한 함수나 기능이 이미 있는 것 같지만, 아직은 모르니 일단은 이렇게라도 작성해서 써야지~

반응형