Python을 사용하여 SQLite 기반 간단한 응용 프로그램 만들기
소개하다.
대부분의 현대 응용 프로그램은 어떤 데이터 저장을 필요로 한다.이를 위해 일반적으로 PostgreSQL, MySQL, Microsoft SQL Server 등 관계 데이터베이스 관리 시스템(RDBMS)을 사용합니다.그러나 초보자들은 그것을 이해하기 어려울 것이다. 이것이 바로 SQLite가 등장했을 때이다.
본고에서 SQLite가 무엇인지, 그리고 Python과 어떻게 결합하여 사용하는지 보여 드리며 간단한 데이터베이스 드라이버를 만들 것입니다.이것은 Python 지식 (변수,if/else 문장, 순환) 을 알고 있다고 가정합니다.우리는 또한 SQL을 사용할 것이다. 만약 당신이 그것에 대해 아무것도 모른다면, SQLBolt은 좋은 출발점이다.당신은 표에 대해 간단한 조회를 어떻게 실행하는지 알아야 합니다.
SQLite 정보
SQLite는 위에서 열거한 것과 유사한 관계 데이터베이스 관리 시스템이지만 현저한 차이가 있습니다!
Wikipedia부터 시작:
In contrast to many other database management systems, SQLite is not a client–server database engine.
이것은 데이터베이스 서버가 없다는 것을 의미한다.모든 데이터는 한 파일에 저장됩니다.또한 데이터베이스를 테스트용 컴퓨터의 RAM에 저장할 수도 있습니다.
SQLite는 Django 등 웹 프레임워크(또는 SQLite 드라이버를 가진 프로그래밍 언어)에도 사용할 수 있다.
응용 프로그램 정보
이 응용 프로그램은 SQLite의 사용을 보여주는 간단한 주석 목록이 될 것입니다.복잡할 거 없어요. 데이터베이스에 중점을 두고 싶어서요.
소프트웨어 선결 조건
sqlite3
패키지에 SQLite 지원을 내장했습니다.가자!
응용 프로그램 만들기
초기화
텍스트 편집기를 열고 새 Python 스크립트를 만듭니다.나는 나의 이름을
notes.py
이라고 명명했다.앞서 말씀드렸듯이 SQLite 지원은
sqlite3
번들로 제공됩니다.가져오기import sqlite3
현재 우리는 데이터베이스 연결을 만들 수 있다.# open a SQLite connection
# a database file called data.db will be created,
# if it does not exist
connection = sqlite3.connect('data.db')
# close the connection
connection.close()
'data.db'
은 모든 내용일 수 있습니다. (유효한 Python 문자열만 있다면)데이터베이스를 RAM ':memory:'
을 사용하십시오.connection.close()
방법;데이터베이스 데이터베이스에 데이터 나열
데이터베이스를 조회하기 위해서, 우리는 반드시 database cursor을 만들어야 한다.
그리고 우리는 그것을 사용하여 조회를 실행할 수 있다.
connection = sqlite3.connect('data.db')
과 connection.close()
사이에 다음 코드를 추가합니다.# create a database cursor
cur = connection.cursor()
# query the database for ALL data in the notes table
cur.execute('SELECT * FROM notes;')
# print the result
result = cur.fetchall()
print(result)
# close the cursor
cur.close()
execute
방법으로 데이터베이스 result
이라는 변수(fetchall
이 원조 목록을 되돌려준다)에 분배하고 import sqlite3
# open a SQLite connection
# a database file called data.db will be created,
# if it does not exist
connection = sqlite3.connect('data.db')
# create a database cursor
cur = connection.cursor()
# query the database for ALL data in the notes table
cur.execute('SELECT * FROM notes;')
# print the result
result = cur.fetchall()
print(result)
# close the cursor
cur.close()
# close the connection
connection.close()
"이런 테이블 없음" 오류
지금 이 파이썬 스크립트를 실행하려고 하면 다음과 같은 오류가 발생할 수 있습니다.
$ python notes.py
Traceback (most recent call last):
File "/home/bartoszg/Dokumenty/code/console-sqlite/notes.py", line 12, in <module>
cur.execute('SELECT * FROM notes;')
sqlite3.OperationalError: no such table: notes
이것은 절대적인 정상이다. 우리는 데이터가 없는 새로운 데이터베이스를 조회하려고 한다.일반적으로 RDBMS의 데이터는 테이블(relations)에 배치됩니다.
자료 출처: https://dba.stackexchange.com/questions/187544/designing-a-database-structure-for-companies-and-stock-owners
위의 데이터베이스에는 세 개의 테이블이 있습니다.
테이블 생성
notes
이라는 새 시계를 묘사해 보도록 하겠습니다.테이블 열에는 다음이 포함됩니다.
ID
다음은 SQL의 모습입니다.
CREATE TABLE IF NOT EXISTS notes (
id INTEGER PRIMARY KEY,
name TEXT NOT NULL,
description TEXT
);
Python 코드에 SELECT
조회 전에 놓으십시오.# create the database table if it doesn't exist
table_schema = """
CREATE TABLE IF NOT EXISTS notes (
id INTEGER PRIMARY KEY,
name TEXT NOT NULL,
description TEXT
);
"""
cur.execute(table_schema)
코드는 다음과 같아야 합니다.import sqlite3
#
# Establishing connection
#
# open a SQLite connection
# a database file called data.db will be created,
# if it does not exist
connection = sqlite3.connect('data.db')
# create a database cursor
cur = connection.cursor()
#
# Creating the table
#
# create the database table if it doesn't exist
table_schema = """
CREATE TABLE IF NOT EXISTS notes (
id INTEGER PRIMARY KEY,
name TEXT NOT NULL,
description TEXT
);
"""
cur.execute(table_schema)
#
# Querying the database
#
# query the database for ALL data in the notes table
cur.execute('SELECT * FROM notes;')
# print the result
result = cur.fetchall()
print(result)
#
# Cleaning up
#
# close the cursor
cur.close()
# close the connection
connection.close()
이 스크립트를 실행하는 경우 다음을 수행합니다.$ python notes.py
[]
예상한 바와 같이, 우리 테이블에는 데이터 줄이 없지만, 오류가 없습니다. 왜냐하면 이 테이블에 존재하기 때문입니다.데이터 삽입
데이터베이스에 새 줄을 삽입하려면
INSERT
문장을 사용합니다.데이터베이스에 대한 질의는 다음과 같습니다.INSERT INTO notes (name, description)
VALUES ('my first note', 'hi, this is the description');
첫 번째 줄에서 우리는 어떤 열을 삽입해야 하는지 설명했고, 두 번째 줄에서 우리는 이 열에 어떤 데이터를 포함해야 하는지를 지정했다.id
열은 포함되지 않았습니다.이렇게 하면 자동으로 임의 값으로 설정됩니다.이제 Python 코드의 경우:
#
# Inserting to the database
#
# insert some hard-coded data
insert_query = """
INSERT INTO notes (name, description)
VALUES ('my first note', 'hi, this is the description');
"""
cur.execute(insert_query)
# save it in the database file
connection.commit()
데이터베이스 부분을 조회하기 전에 놓으세요.사용자 정의 데이터, SQL 주입
'my first note'
과 'hi, this is the description'
을 교체할 수 있습니다.name = input('Note name')
desc = input('Note description')
# insert some hard-coded data
insert_query = """
INSERT INTO notes (name, description)
VALUES ('{}', '{}');
""".format(name, desc)
cur.execute(insert_query)
Hovewer는 데이터베이스가 SQL injection의 공격을 받기 쉽다는 것을 의미합니다.모든 SQL 코드를 실행할 수 있으므로 무시무시한 결과가 발생할 수 있습니다.대신 SQL 매개 변수를 사용하여 사용자가 제공한 데이터를 포함하는 SQL 조회를 안전하게 수행합니다.다음은
SELECT ... FROM ... WHERE
질의 사용 예입니다.x = int(input())
y = input()
# the correct way
cur.execute('SELECT * FROM abc WHERE x = ? AND y = ?', (x, y))
# NEVER DO THIS
cur.execute(f'SELECT * FROM abc WHERE x = {x} AND y = "{y}"')
# NEVER DO THIS
cur.execute('SELECT * FROM abc WHERE x = {} AND y = "{}"'.format(x, y))
# NEVER DO THIS
cur.execute('SELECT * FROM abc WHERE x = %d AND y = "%s"' % (x, y))
이것이 바로 우리가 응용 프로그램에서 그것을 실현하는 방식이다.#
# Inserting to the database
#
name = input('Note name: ')
desc = input('Note description: ')
# insert some hard-coded data
insert_query = """
INSERT INTO notes (name, description)
VALUES (?, ?);
"""
cur.execute(insert_query, (name, desc))
# save it in the database file
connection.commit()
지금 스크립트를 실행해 보십시오.$ python notes.py
Note name: hello
Note description: this is my first note
[(1, 'hello', 'this is my first note')]
정말 쓸모가 있다!몇 번 운행해 보아라.향상된 데이터 표시
데이터를 Python 배열로 표시하는 것은 우아하지 않습니다.조회 데이터베이스 부분을 수정해서 변경합시다.
#
# Querying the database
#
# query the database for ALL data in the notes table
cur.execute('SELECT * FROM notes;')
# print the result
print('\nNotes:')
for row in cur.fetchall():
display_name = row[1]
display_desc = row[2]
print(f'Note name: {display_name}\nNote description: {display_desc}\n')
cur.fetchall
은 하나의 원조수조 row[1]
은 2열 값(이름)이고 row[2]
은 3열 값이다.첫 번째 값(ID) \n
문자는 전의 서열이다.그것은 그 위치 지금 이 스크립트를 실행해 보십시오.많이 좋아진 것 같지 않아요?
결론
이것이 바로 이 강좌의 전체 내용이다.읽어 주셔서 감사합니다. 새로운 것을 배웠으면 좋겠습니다.사실, 이것은 나의 첫 번째 문장: D
우리는 단지 표면에 닿았을 뿐이다.SQLite에 대한 자세한 내용은 SQLite Tutorial을 참조하십시오.
응용 프로그램의 소스 코드 here에 접근할 수 있습니다.
숙제
너는 자신을 단련하고 싶니?
Reference
이 문제에 관하여(Python을 사용하여 SQLite 기반 간단한 응용 프로그램 만들기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/karmekk/creating-a-simple-sqlite-based-app-with-python-2p2c텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)