SQLite

import sqlite3

con = sqlite3.connect('sample.db') #データベースへ接続、無ければ作製

cur = con.cursor() #カーソルオブジェクト作製

sql = "create table fruits(name text, price text);" #Table作製
cur.execute(sql)

sql_2 = "insert into fruits values('apple', '100yen')" #レコード挿入
cur.execute(sql_2)

cur.executemany("insert into fruits values(?, ?)", [('orange', '150yen'), ('banana', '200yen')]) # レコードを一括挿入

sql_3 = "select * from fruits"
cur.execute(sql_3) # select文をexecute()に渡す
for row in cur:    # レコードを出力する
        print(row[0], row[1])

con.commit()    #コミットする

con.close()

INTEGER PRIMARY KEY AUTOINCREMENT:自動的に番号を割り振る

sql = "create table fruits(id INTEGER PRIMARY KEY AUTOINCREMENT, price text);"
cur.execute(sql)

#この場合、テーブル作成ごとに第一カラムに番号が割り振られます

カラム1つに値を入れる

t = '200yen'
cur.execute("insert into fruits(price) VALUES(?)",(t,))

カラム2つに値を入れる

cur.execute("insert into fruits values(?,?)",('apple','100yen'))

または

p = "insert into fruits values(?, ?)"
cur.execute(p, ('orange', '200yen'))

複数レコードを挿入

data = [
        ('grape1','100yen'),
        ('grape2','200yen'),
        ('grape3','300yen'),
]
cur.executemany("insert into fruits values(?,?)", data)

複数レコードの更新


sql = "update tweet set word = 'Yamaoka' where id = 2;"
cur.execute(sql)

#sql = "update テーブル名 set カラム名 = 値 where 条件;"

レコードの削除

cur.execute('delete from fruits where name=?', ('grape1',))

#カーソルオブジェクト.execute('delete from テーブル名 where 条件指定)

テーブルの中身を削除

cur.execute('delete from fruits')

#カーソルオブジェクト.execute('delete from テーブル名')

テーブルの削除


cur.execute('drop table fruits')

#カーソルオブジェクト.execute('drop table テーブル名')

テーブルがすでに存在しなければ作製

sql =  "create table if not exists fruits(name text, price text);"
cur.execute(sql)

テーブルがすでに存在しなければ作製②

cur.execute("""
        SELECT COUNT(*) FROM sqlite_master 
        WHERE TYPE='table' AND name='テーブル名'
        """)

if cur.fetchone()[0] == 0:
        sql = "create table テーブル名(id INTEGER PRIMARY KEY AUTOINCREMENT, word text);"
        cur.execute(sql)
        print('create')

条件を指定して参照

cur.execute("select * from fruits where id >= 2") #2以上
select_data = cur.fetchall()

for row in select_data:
        print(row[1])

または

k = "キーワード"
data = cur.execute("select * from fruits where keyword = ?",(k,))

for row in data:
	print(row[1])
	word_list.append(row[1])

条件を指定して参照(変数使用)

num = 2

cur.execute("select * from fruits where id >= ?",(num,))
select_data = cur.fetchall()

for row in select_data:
        print(row[1])

条件を指定+最大値を求める


q = "キーワード"
sql = "select max(カラム名) from テーブル名 where カラム名(条件指定対象) = ?"

data = cur.execute(sql,(q,))

for a in data:
	print(a)

条件を指定して参照(変数使用)②


hoge = "キーワード"

sql = "select * from テーブル名 where カラム名 = ?"

data = cur.execute(sql,(hoge,))

for a in data:
	print(a[2])

条件を指定して最初の1件のみ参照(変数使用)


q = "キーワード"

#data = cur.execute("select * from fruits where keyword = ?",(q,))

data = cur.execute("select * from fruits where keyword = ? limit 1",(q,))

あるレコードの存在の確認


q = キーワード

data = cur.execute("select exists(select * from fruits where screen_name = ?)",(q,))

for row in data:
	#row = タプル型
	if row[0] == False:
		print("レコードは存在しません")
	else:
		print("レコードは存在します")

カラムの追加


cur.execute("alter table fruits add column image_id integer")

#alter table テーブル名 add column カラム名 値の種類


SQLite

Posted by iser