0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Python / Hy with SQLite

Last updated at Posted at 2021-11-01

Python と Hy の場合での SQLite データベースを使うときの対照サンプルコード。

Python と Hy の関係

Hy とは python の abstract syntax tree に Lisp 言語のシンタックスである S 式を変換して python コードとして実行する S 式を用いた言語。

ちょっとなんのことかわからない。やってみたら、こういうこと。
下のスクリーンショットは、Hy で書いた S 式プログラム(上部)の実行時、python コード(下部)へ変換されている様子を表している。

Screenshot_20211022-145341_kindlephoto-12047076.png

コラム

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

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

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

pypysqlite.py
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

hyhysqlite.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 ;
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?