ラベル sqlite3 の投稿を表示しています。 すべての投稿を表示
ラベル sqlite3 の投稿を表示しています。 すべての投稿を表示

2019-07-17

Sqlite3,検索,複数カラム(フィールド)から同一の値があるレコードを簡略化して検索

データベース  Sqlite3
テーブル名  main
カラム(フィールド)  fn1, fn2, fn3, fn4

「 カラム fn1, fn2, fn3, fn4 に共通した値のレコードを検索する 」

fn1 = 99 , fn2 = 99, fn3 = 99, fn4 = 99 であるレコードを検索する

 ■ python3 プログラム

import sqlite3
db_name = "abc.sqlite"

conn = sqlite3.connect(db_name)
conect = conn.cursor()

sql = " SELECT * FROM  main  WHERE  fn1=99 or fn2=99 or fn3=99 or fn4=99 "

conect.execute(sql)
conn.close()


sql = を次のように簡略化できる

sql = " SELECT * FROM  main  WHERE  (fn1|fn2|fn3|fn4) in (99) "


値が fn1=99 または fn1=999 のときは

sql = " SELECT * FROM  main  WHERE  (fn1|fn2|fn3|fn4) in (99,999) "


値が fn1!=99 または fn1!=999 のときは

sql = " SELECT * FROM  main  WHERE  not (fn1|fn2|fn3|fn4) in (99,999) "


など、値が複数ある場合は便利な書式である。

2018-01-14

Drupal8のテーマ作成にあたり、キャッシュを無効にする

■キャッシュ機能とは


CMSであるDrupal8には、キャッシュ機能がある。

既知の通りホームページは、文字、写真、動画や音の情報を組み立てて、見やすいように整形されてからブラウザに表示される。

ホームページを表示する際に、たくさんの部品(文字や写真など)を様々なフォルダーからかき集めて、最終的に決められた方法で文字や画像を整えて表示する。まるで自動車を完成させるために、多くの工場から部品を集めて自動車工場で設計図通りに組み立てる仕組みと似ている。

ホームページがブラウザに表示され、2回目以降同一のページが表示される場合には、初めて表示される同じ手続きで表示されると効率が悪い。そこで、出来る限り効率よくホームページを表示するために、多くの部品を集めて整形した状態を特定フォルダに保存する。同一ページが2回目以降呼び出された際には、特定フォルダーから完成されたページを直接呼び出し表示する。
これをキャッシュ機能という。

キャッシュ機能は効率よく素早く表示する長所があるが、短所もある。
表示された直後に文字内容や写真の表示位置が変更されても、変更内容が呼び出されず、変更前のまま表示されるため、リアルタイムで表示する場合には不便である。
最初に表示されてから、一定時間経過すると保存されたページの内容は自動削除されて、変更された新しい内容が表示される仕組みとなっている。



■なぜ、キャッシュ機能を無効にするのか?


ホームページのデザインを作成する際に、変更した内容はキャッシュ機能によってすぐに反映されない。反映させるには、一度表示された内容をパソコン上から削除しなければならない。デザインする際にいちいち昔のデータを削除する行為は、非効率である。だから、キャッシュ機能を無効にする。



■Drupal8のキャッシュ機能を無効にする方法


【 環境 】
OS : Linux Mint18
Drupal Version : 8.4.4
DataBase : SQLite

【 概要 】
キャッシュ機能を無効にするために、特定のフォルダー内にファイルを作成し、既存の内容に書き加えたり一部削除する。

【 方法 】

    ファイルの作成(1)
---------------------------------

/sites ディレクトリにある example.settings.local.php を /sites/default ディレクトリに settings.local.php という名前でコピーする。

    ファイルの編集(1)
---------------------------------

/sites/default/settings.php にある以下の内容がコメントアウトされているので、コメントを解除し、 ローカル用の設定ファイルを追加で読み込む。

    ▶settings.php 編集 (以下3行をコメントアウト  789行目辺り)
if (file_exists($app_root . '/' . $site_path . '/settings.local.php')) {
include $app_root . '/' . $site_path . '/settings.local.php';
}

※コメントアウト : 文頭に # 記号をつけて命令文として認識させないようにする。削除と同じ行為だが、命令文として復帰させる場合に容易である。
※コメントを解除 : 文頭の # 記号を削除し、命令文として認識させる。

    ファイル編集(2)
---------------------------------

コピーした sites/default/settings.local.php をテキストエディタで開き、以下のコメントを解除し(2箇所)、キャッシュを無効化する。

    ▶settings.local.php 編集 (以下1行をコメントアウト 67行目辺り)
$settings['cache']['bins']['render'] = 'cache.backend.null';


    ▶settings.local.php 編集 (以下1行をコメントアウト 76行目あたり)
$settings['cache']['bins']['dynamic_page_cache'] = 'cache.backend.null';


    ファイル作成(2)
---------------------------------

/sites ディレクトリにある development.services.yml をsites/default にコピーする。

    ファイル編集(3)
---------------------------------

sites/default/development.services.yml をテキストエディタで開き、以下の内容を追加記述しTwigのデバッグ機能を有効にする。

    ▶以下の5行をファイル末尾に追加
parameters:
  twig.config:
    debug: true
    auto_reload: true
    cache: false

キャッシュ機能を無効にする方法は以上。

もし、上記の方法でキャッシュが無効にならない(デザインの変更がすぐに反映されない)場合、管理画面にある”すべてのキャッシュをクリアー”ボタンを使用する。変更するごとにボタンを押して少し待つため、非常に時間のロスになる。

筆者も、少しの記述ミスで作動しなかったため、作動しない場合に他のサイトも参考に正しく手順を踏まえたか再度確認する。

キャッシュを無効にした際に、Drupalにエラーや警告が発生した。
テーマ作成上に支障はなかったようだった。
再び、キャッシュを有効にした際に、エラーや警告は無くなった。
上記方法でキャッシュ無効にする際は、自己責任でお願いします。

2018-01-13

Drupal8,ログインできなくなった,解決方法

【 状況 】

Drupal8にログインできなくなった。

ログインしようとすると、「ユーザー名 ◯×△□ はまだアクティブ化されていないか、ブロックされています。 」とうメッセージでログイン出来ず。



【 原因 】

People => ユーザ設定

設定内容を変更した

Status:  Blocked ==> Active

に変更後、保存すると自動的にログアウトしてしまう。
以降ログインできなくなる。


【 解決方法 】

データベースの内容を書き換える

table: users_field_data
field: status
変更内容: 0 ==> 1


上記方法は正式な解決方法と思われない。
他に方法があると思われる。
したがって、自己責任でお願いします。


2017-11-26

Drupal8,ログインできなくなった

Drupal8に突然ログインできなくなった。
原因は、Usernameの変更にあった。

変更した場合は、インストール時とログインが異なるので注意。






↑↑
変更したことを忘れないように!

Drupal8,インストール,トラブル解決法 その2

環境

OS : Linux Mint18
ソフト名 : Drupal8
データベース : Sqlit3

見つかったエラー
─────────────────────────────
信頼の置けるホストの設定

無効
settings.php の trusted_host_patterns が設定されていません。そのため、セキュリティ面で脆弱となるかもしれません。設定することを強くおすすめします。より詳しい情報は、HTTP HOST ヘッダー攻撃への防御を参照してください。
─────────────────────────────








解決方法

指定ファイルの内容を一部書き換える。

▶ settings.php

* $settings['trusted_host_patterns'] = array(
*   '^example\.com$',
*   '^.+\.example\.com$',
*   '^example\.org$',
*   '^.+\.example\.org$',
* );


上記の内容を対処方法(1)〜(4) のいずれかに書き換える。(736行目当たり)

対処方法 (1) ---> http://localhost/サイト名

▶ sites/default/settings.php

$settings['trusted_host_patterns'] = [
 '^localhost$',
 ];


自身のサーバであれば、  '^localhost$', が含まれていれば問題ない。


対処方法 (2) ---> http://localhost
▶ sites/default/settings.php

Trusted host security setting in Drupal 8.4.0 and PHP 7.1.8 for XAMP

To enable the trusted host mechanism, we need to enable our allowable hosts
 in $settings['trusted_host_patterns'].

Open the "settings.php" file and update the below code to Enable the Trusted host setting:

$settings['trusted_host_patterns'] = array(
 '^localhost$',
 '^192\.168\.00\.52$',
 '^127\.0\.0\.1$',
);


自身のサーバーの場合。



対処方法 (3) ---> http://www.example.com

▶ ファイル名 sites/default/settings.php


$settings['trusted_host_patterns'] = array(
  '^example\.com$',
  '^www\.example\.com$',
  '^localhost$',
);

自身のサーバから、公開用のサーバにコピーする場合。
自身のサーバー http://localhost/www.example.com でテストし、
公開するURLが http://www.example.com の時。



対処方法 (4) ---> http://drupal8

▶ sites/default/settings.php

$settings['trusted_host_patterns'] = [
  '^drupal8$',
];

http://drupal8 で公開する場合。

以上。


2017-11-19

Drupal8,インストール,トラブル解決法 その1

環境

OS : Linux Mint18
ソフト名 : Drupal8
データベース : Sqlite3

インストール時に表示された警告

─────────────────────────────
PHP OPcodeのキャッシング

無効
PHP OPcode キャッシングはサイトのパフォーマンスを大幅に改善します。OPcache がサーバーにインストールされていることをお勧めします。
─────────────────────────────
Drupal8,インストール,トラブル解決法 その1-1





対処方法

設定ファイルの内容を書き換えることで解決した。

設定ファイル名 : php.ini
< ファイルがある場所 lampp/etc/php.ini >


変更内容は次の通り。

';' 記号を削除して OPcache を有効にする
 【 変更内容 】
;zend_extension=opcache.so
    ↓↓
zend_extension=opcache.so

Apache を再起動することを忘れずに!

2018.1.26 追加 -----------------------------------------
以下の内容を追加する
(本トラブルの解決に必要かは未確認だが、PHPサイトではOPcodeのキャッシングを設定する上で必要と記されていた)
[ 追加 ]
zend_extension=php_opcache.dll
[opcache]
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.revalidate_freq=60
opcache.fast_shutdown=1
opcache.enable_cli=1



2017-03-12

pythonを実行してもsqlite3のエラーが出る、パス編

OS : Linux Mint
言語 : python3

sqlite3のファイルを読み込もうとするが、ファイル名を認識しない
━━━━━━━━━━━━━━━━━━━━━━━━━━━
sqlite3のファイル名をフルパスで設定する。
/home から始まるファイル名

Linux で プログラムが置かれているディレクトリを認識するには
プログラムが /home/hitokoto/python/program フォルダーに置かれている場合

import os
print ( os.path.abspath(os.path.dirname(__file__)) )


--- 実行結果 ---
/home/hitokoto/python/program


python,sqlite3,SQLでレコード総数(行の総数)を計算する

言語 : python3

sqlite3に保存されているレコード数の合計(行数の合計)を計算する。
(レコード総数が5)
     ▶ レコード総数の取得

#sqlite3に接続する
conn = sqlite3.connect('hitokoto.sqlite')
conect = conn.cursor()

#SQL 設定  テーブル名:table_ubuntu
sql = 'SELECT count(*) FROM ' + 'table_ubuntu'
#SQLを実行し、レコード数を得る
conect.execute(sql)
result = conect.fetchall()
#結果は リスト、タプル型で出力される => [(5,)]
print (result)

record_max = result[0][0]
print ('登録されている総レコード数 ==> ', record_max)

--- 実行結果 ---
[(5,)]
登録されている総レコード数 ==> 5

--------------------------------------------------
特定のフィールド名で計算する場合

sql = 'SELECT count(フィールド名)  ' + テーブル名

に書き換える。

ただし、指定フィールド名のデータが空の場合は結果に含まれない
使い分けは次の通り

count(*) : 総レコード数を計算
count(フィールド名)  : 指定フィールドで空でない登録されているデータ数を計算