Python と Hy の場合での SQLite データベースを使うときの対照サンプルコード。
Python と Hy の関係
Hy とは python の abstract syntax tree に Lisp 言語のシンタックスである S 式を変換して python コードとして実行する S 式を用いた言語。
ちょっとなんのことかわからない。やってみたら、こういうこと。
下のスクリーンショットは、Hy で書いた S 式プログラム(上部)の実行時、python コード(下部)へ変換されている様子を表している。
コラム
Python の abstract syntax tree (抽象構文木)って何 ?
https://qiita.com/intermezzo-fr/items/3ae7645bd7d4414d9607
https://ja.m.wikipedia.org/wiki/%E6%96%87%E8%84%88%E8%87%AA%E7%94%B1%E6%96%87%E6%B3%95
https://www.krrk0.com/context-free-grammar/
https://www.momoyama-usagi.com/entry/info-automaton07
(「Python の abstract syntax tree (抽象構文木)って何 ?」で検索するとよか。)
Hy の紹介と共に 作者の Paul Tagliamonte へのインタビュー ( 2013-15 年辺りの)が掲載されている
https://julien.danjou.info/the-hacker-guide-to-python-third-edition/
https://www.pythonpodcast.com/episode-23-hylang-core-developers/
木(抽象構文木) てなんだろ ?
https://www.lambdanote.com/products/ruby-ruby
構文木のある風景
https://i.loveruby.net/ja/rhg/book/syntree.html
Speaker: Paul Tagliamonte
This talk will cover the internals of Python, such AST, Import hooks, creating a console, and a very brief overview of Python internal formats (such as pyc files), by way of looking over the implementation of a Lisp called "Hy". No Lisp knowledge is required.
Slides can be found at: https://speakerdeck.com/pycon2014 and https://github.com/PyCon/2014-slides
https://youtu.be/AmMaN1AokTI?t=355
Web インタプリター
https://hylang.github.io/hy-interpreter/
コマンドラインから、入力された文字列を含む SQLite データベースファイルを作るサンプル。
python
pypysqlite.py
import sqlite3
import os
import sys
SQL = """
create table tbl_Py (
id INTEGER PRIMARY KEY,
url text,
title text
);
"""
current_name = sys.argv[1]
db = sqlite3.connect("Py_" + current_name + ".db")
cur = db.cursor()
db.execute(SQL)
db.commit()
ターミナル(あの黒い画面)から実行
python pypysqlite.py pysqlite
Py_pysqlite.db というデータベースファイルが作られる。
hy
hyhysqlite.hy
(import sqlite3)
(import os)
(import sys)
(setv SQL "create table tbl_Hy (id INTEGER PRIMARY KEY,url text,title text)")
(setv current-name (get sys.argv 1))
(setv db (.connect sqlite3 (+ "Hy_" current-name ".db")))
(setv cur (.cursor db))
(.execute db SQL)
;;(db.execute SQL)
(.commit db)
;;(db.commit)
ターミナル(黒い画面)から実行
hy hyhysqlite.hy hysqlite
Hy_hysqlite.db というデータベースファイルが作られる。
データベースにデータをインサートするサンプル
python
count = 1
url = "https://qiita.com/dauuricus/items/d8bd9d3301409f51c64e"
title = "Python / Hy with SQLite"
cur.execute("insert into tbl_Py(id,url,title) values(?,?,?) ;",[count,url,title])
db.commit()
hy
(setv count 1
url "https://qiita.com/dauuricus/items/d8bd9d3301409f51c64e"
title "Python / Hy with SQLite")
(cur.execute "insert into tbl_Hy(id,url,title) values(?,?,?)"
[count url title])
(.commit db)
;;(db.commit)
SQLite のメリットは、データベースがファイルなので、これはデメリットでもあるかもしれないが、パスワードや所有者の限定なく閲覧と編集が可能。
例えば、SQLite の実行プログラムがなくてもオンラインの SQLite 実行環境にファイルを渡せば確認できる。
- データベースの構造の確認。テーブル、コラム、データタイプ。
SQL コマンド
.schema
- インサートされたデータの確認
SELECT * FROM tbl_Hy ;