CommonLisp에서 Caveman2와 SQLite3을 사용하여 데이터베이스 작업을 시도했습니다.
9065 단어 SQLite3common-lispcaveman2
소개
Caveman2를 공부하자 기사를 써 보았습니다.
Caveman2에서 SQLite를 조작하고 CREATE TABLE/SELECT/INSERT INTO/UPDATE/DELETE를 실행하는 방법을 설명합니다.
Caveman2 스켈레톤 프로젝트의 디렉토리 / 파일 구성
이번 괴롭히는 파일은 이하의 ★마크가 붙어 있는 파일입니다.
cl-caveman2-todo
├── README.markdown
├── app.lisp
├── db
│ ├── todolist.db ★ テーブル作成後に生成されるファイル
│ └── schema.sql
├── cl-caveman2-todo-test.asd
├── cl-caveman2-todo.asd
├── src
│ ├── config.lisp ★ SQLite3の設定関連
│ ├── db.lisp
│ ├── main.lisp
│ ├── view.lisp
│ └── web.lisp ★ SQL文の実行処理関連
├── static
│ └── css
│ └── main.css
├── templates
│ ├── _errors
│ │ └── 404.html
│ ├── index.html
│ └── layouts
│ └── default.html
└── tests
└── myapp.lisp
SQLite3 설정
다음 위치를 찾아서
src/config.lisp(defconfig :common
`(:databases ((:maindb :sqlite3 :database-name ":memory:"))))
다음과 같이 다시 씁니다.
src/config.lisp(defconfig :common
`(:databases ((:maindb :sqlite3 :database-name ,(merge-pathnames #P"db/todolist.db" *application-root*)))))
다양한 SQL 실행 처리
SQL을 실행하기 위한 각종 함수를 정의해 갑니다.
테이블 만들기
테이블을 만드는 함수입니다.
이 함수를 실행하면 db
디렉토리 아래에 todolist.db
가 생성됩니다.
src/web.lisp(defun create-table ()
(with-connection (db)
(execute
(create-table (:tasks :if-not-exists t)
((id :type 'integer :primary-key t :unique t :autoincrement t)
(name :type 'text))))))
테이블 내용 표시
현재의 테이블 내용을 표준 출력한다.
src/web.lisp(defun view-tasks ()
(with-connection (db)
(let ((result (retrieve-all (select (:*) (from :tasks)))))
(dolist (n result)
(format t "~{~A ~}~%" n)))))
데이터 삽입
테이블에 데이터를 삽입합니다.
인수에 삽입할 데이터를 넣습니다.
src/web.lisp(defun insert-task (data)
(with-connection (db)
(execute
(insert-into :tasks
(set= :name data)))))
데이터 업데이트
지정된 ID의 데이터를 갱신합니다.
인수는 ID와 업데이트 후 데이터.
src/web.lisp(defun update-task (id name)
(with-connection (db)
(execute
(update :tasks
(set= :name name)
(where (:= :id id))))))
데이터 삭제
데이터를 삭제합니다.
인수로 삭제할 데이터의 ID를 지정합니다.
src/web.lisp(defun delete-task (id)
(with-connection (db)
(execute
(delete-from :tasks
(where (:= :id id))))))
실행
다음 명령으로 실행
프로젝트 로드(ql:quickload :cl-caveman2-todo)
테이블 만들기(cl-caveman2-todo.web::create-table)
테이블 내용을 표시(cl-caveman2-todo.web::view-tasks)
데이터 삽입(cl-caveman2-todo.web::insert-task "データ")
데이터 업데이트(cl-caveman2-todo.web::update-task 1 "データ")
데이터 삭제(cl-caveman2-todo.web::delete-task 1)
이하, 실행중인 모습
create-table
함수 실행 후 db
디렉토리 아래에 있는 todolist.db
에도 각종 SQL 실행 결과가 제대로 반영되어 있습니다.
[테이블 작성 전후]
[ 데이터 삽입 후 ]
[ 데이터 갱신 후 ]
[ 데이터 삭제 후 ]
마지막으로
처음 SQLite3을 사용했지만 간단하고 사용하기 쉽습니다.
후에는 브라우저로부터의 입력이나 브라우저에의 반영을 할 수 있으면 TODO리스트 어플리모드키를 만들 수 있을 것 같은 생각이 듭니다.
Reference
이 문제에 관하여(CommonLisp에서 Caveman2와 SQLite3을 사용하여 데이터베이스 작업을 시도했습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/fireflower0/items/855d5b0f534fb8855d5d
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
이번 괴롭히는 파일은 이하의 ★마크가 붙어 있는 파일입니다.
cl-caveman2-todo
├── README.markdown
├── app.lisp
├── db
│ ├── todolist.db ★ テーブル作成後に生成されるファイル
│ └── schema.sql
├── cl-caveman2-todo-test.asd
├── cl-caveman2-todo.asd
├── src
│ ├── config.lisp ★ SQLite3の設定関連
│ ├── db.lisp
│ ├── main.lisp
│ ├── view.lisp
│ └── web.lisp ★ SQL文の実行処理関連
├── static
│ └── css
│ └── main.css
├── templates
│ ├── _errors
│ │ └── 404.html
│ ├── index.html
│ └── layouts
│ └── default.html
└── tests
└── myapp.lisp
SQLite3 설정
다음 위치를 찾아서
src/config.lisp(defconfig :common
`(:databases ((:maindb :sqlite3 :database-name ":memory:"))))
다음과 같이 다시 씁니다.
src/config.lisp(defconfig :common
`(:databases ((:maindb :sqlite3 :database-name ,(merge-pathnames #P"db/todolist.db" *application-root*)))))
다양한 SQL 실행 처리
SQL을 실행하기 위한 각종 함수를 정의해 갑니다.
테이블 만들기
테이블을 만드는 함수입니다.
이 함수를 실행하면 db
디렉토리 아래에 todolist.db
가 생성됩니다.
src/web.lisp(defun create-table ()
(with-connection (db)
(execute
(create-table (:tasks :if-not-exists t)
((id :type 'integer :primary-key t :unique t :autoincrement t)
(name :type 'text))))))
테이블 내용 표시
현재의 테이블 내용을 표준 출력한다.
src/web.lisp(defun view-tasks ()
(with-connection (db)
(let ((result (retrieve-all (select (:*) (from :tasks)))))
(dolist (n result)
(format t "~{~A ~}~%" n)))))
데이터 삽입
테이블에 데이터를 삽입합니다.
인수에 삽입할 데이터를 넣습니다.
src/web.lisp(defun insert-task (data)
(with-connection (db)
(execute
(insert-into :tasks
(set= :name data)))))
데이터 업데이트
지정된 ID의 데이터를 갱신합니다.
인수는 ID와 업데이트 후 데이터.
src/web.lisp(defun update-task (id name)
(with-connection (db)
(execute
(update :tasks
(set= :name name)
(where (:= :id id))))))
데이터 삭제
데이터를 삭제합니다.
인수로 삭제할 데이터의 ID를 지정합니다.
src/web.lisp(defun delete-task (id)
(with-connection (db)
(execute
(delete-from :tasks
(where (:= :id id))))))
실행
다음 명령으로 실행
프로젝트 로드(ql:quickload :cl-caveman2-todo)
테이블 만들기(cl-caveman2-todo.web::create-table)
테이블 내용을 표시(cl-caveman2-todo.web::view-tasks)
데이터 삽입(cl-caveman2-todo.web::insert-task "データ")
데이터 업데이트(cl-caveman2-todo.web::update-task 1 "データ")
데이터 삭제(cl-caveman2-todo.web::delete-task 1)
이하, 실행중인 모습
create-table
함수 실행 후 db
디렉토리 아래에 있는 todolist.db
에도 각종 SQL 실행 결과가 제대로 반영되어 있습니다.
[테이블 작성 전후]
[ 데이터 삽입 후 ]
[ 데이터 갱신 후 ]
[ 데이터 삭제 후 ]
마지막으로
처음 SQLite3을 사용했지만 간단하고 사용하기 쉽습니다.
후에는 브라우저로부터의 입력이나 브라우저에의 반영을 할 수 있으면 TODO리스트 어플리모드키를 만들 수 있을 것 같은 생각이 듭니다.
Reference
이 문제에 관하여(CommonLisp에서 Caveman2와 SQLite3을 사용하여 데이터베이스 작업을 시도했습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/fireflower0/items/855d5b0f534fb8855d5d
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
(defconfig :common
`(:databases ((:maindb :sqlite3 :database-name ":memory:"))))
(defconfig :common
`(:databases ((:maindb :sqlite3 :database-name ,(merge-pathnames #P"db/todolist.db" *application-root*)))))
SQL을 실행하기 위한 각종 함수를 정의해 갑니다.
테이블 만들기
테이블을 만드는 함수입니다.
이 함수를 실행하면
db
디렉토리 아래에 todolist.db
가 생성됩니다.src/web.lisp
(defun create-table ()
(with-connection (db)
(execute
(create-table (:tasks :if-not-exists t)
((id :type 'integer :primary-key t :unique t :autoincrement t)
(name :type 'text))))))
테이블 내용 표시
현재의 테이블 내용을 표준 출력한다.
src/web.lisp
(defun view-tasks ()
(with-connection (db)
(let ((result (retrieve-all (select (:*) (from :tasks)))))
(dolist (n result)
(format t "~{~A ~}~%" n)))))
데이터 삽입
테이블에 데이터를 삽입합니다.
인수에 삽입할 데이터를 넣습니다.
src/web.lisp
(defun insert-task (data)
(with-connection (db)
(execute
(insert-into :tasks
(set= :name data)))))
데이터 업데이트
지정된 ID의 데이터를 갱신합니다.
인수는 ID와 업데이트 후 데이터.
src/web.lisp
(defun update-task (id name)
(with-connection (db)
(execute
(update :tasks
(set= :name name)
(where (:= :id id))))))
데이터 삭제
데이터를 삭제합니다.
인수로 삭제할 데이터의 ID를 지정합니다.
src/web.lisp
(defun delete-task (id)
(with-connection (db)
(execute
(delete-from :tasks
(where (:= :id id))))))
실행
다음 명령으로 실행
프로젝트 로드(ql:quickload :cl-caveman2-todo)
테이블 만들기(cl-caveman2-todo.web::create-table)
테이블 내용을 표시(cl-caveman2-todo.web::view-tasks)
데이터 삽입(cl-caveman2-todo.web::insert-task "データ")
데이터 업데이트(cl-caveman2-todo.web::update-task 1 "データ")
데이터 삭제(cl-caveman2-todo.web::delete-task 1)
이하, 실행중인 모습
create-table
함수 실행 후 db
디렉토리 아래에 있는 todolist.db
에도 각종 SQL 실행 결과가 제대로 반영되어 있습니다.
[테이블 작성 전후]
[ 데이터 삽입 후 ]
[ 데이터 갱신 후 ]
[ 데이터 삭제 후 ]
마지막으로
처음 SQLite3을 사용했지만 간단하고 사용하기 쉽습니다.
후에는 브라우저로부터의 입력이나 브라우저에의 반영을 할 수 있으면 TODO리스트 어플리모드키를 만들 수 있을 것 같은 생각이 듭니다.
Reference
이 문제에 관하여(CommonLisp에서 Caveman2와 SQLite3을 사용하여 데이터베이스 작업을 시도했습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/fireflower0/items/855d5b0f534fb8855d5d
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
(ql:quickload :cl-caveman2-todo)
(cl-caveman2-todo.web::create-table)
(cl-caveman2-todo.web::view-tasks)
(cl-caveman2-todo.web::insert-task "データ")
(cl-caveman2-todo.web::update-task 1 "データ")
(cl-caveman2-todo.web::delete-task 1)
처음 SQLite3을 사용했지만 간단하고 사용하기 쉽습니다.
후에는 브라우저로부터의 입력이나 브라우저에의 반영을 할 수 있으면 TODO리스트 어플리모드키를 만들 수 있을 것 같은 생각이 듭니다.
Reference
이 문제에 관하여(CommonLisp에서 Caveman2와 SQLite3을 사용하여 데이터베이스 작업을 시도했습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/fireflower0/items/855d5b0f534fb8855d5d텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)