忍者ブログ
Admin / Write / Res
ちゃんとカテゴリ分けされておりませんので、 記事をお探しならブログ内検索が便利です。 ご活用くださいませー+.(≧∀≦)゚+.゚
ブログ内検索
カレンダー
10 2024/11 12
S M T W T F S
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
カウンター
アクセスカウンター
最新コメント
[11/26 Jesserag]
[11/25 Jesserag]
[11/24 ดอกไม้หน้าเมรุ]
[11/24 ร้านดอกไม้ด่วน]
[11/23 ช่อดอกไม้สีพาสเทล]
最新トラックバック
プロフィール
+ハンドル+
y_ayamori(purple)
+職業+
IT系エンジニア
+すまい+
さいたま
バーコード
[1]  [2]  [3]  [4]  [5
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

ガチdeメモ
sudo dnf install curl gcc openssl-devel bzip2-devel libffi-devel zlib-devel wget make -y
export CFLAGS="-fPIC"
./configure --enable-optimizations --prefix=${HOME}
make clean
make -j $(nproc)
make install

拍手

PR
バージョンを落として解決!
とか何の解決にもなっていない記事が散見されるので備忘録。

必要なライブラリがないからpipで失敗するのでパッケージ管理コマンドで事前にインストールしておくだけです。
# Redhat系
sudo dnf install mariadb-connector-c-devel

# Debian系
sudo apt install libmysqlclient-dev

Refs: How to install libmysqlclient-dev at AlmaLinux 9.2
#Python3 #pip #mysql

拍手

これもすぐ忘れてしまうのよねー
ってことでメモします。


sum(1 for line in open('filename'))

試験環境
Windows7 or Linux
Python 2.7.8
Python2.6.6

参考URL
http://d.hatena.ne.jp/cafistar/20120405/1333600582
http://stackoverflow.com/questions/845058/how-to-get-line-count-cheaply-in-python

拍手

データベース上で日付の計算を行いたいことはよくあります。
集計、はビッグデータ時代には必須ともいえるかもしれません。
MySQLは多くの日付計算のための仕組みを用意してくれています。
遠慮なく使わせていただきましょう^^

ですが、注意点もあります。
それはMySQLはCAST(型変換)がとても強く働くことです。
これは便利なようですが、よく理解しないまま使用すると想定しない値を返却する場合があります。
加えて、関数にたくさんのシノニム(別名:alias)が存在するので、結構現場に混乱をもたらします。
とはいえ便利ですし、レコードの解析の際はお世話になることが多いですので、覚えておいて損はありません。
大事なのは、日付の場合はこの関数。
時間の場合はこの関数。
など決めを作り、運用するのがいいかもしれませんね。
もっとも私は関数あまり使いませんけど~ (えっ

-- 今日
SELECT NOW(), CURDATE(), CURTIME();
-- 日付計算
SELECT
    NOW()
    , NOW() + INTERVAL 1 DAY
    , NOW() + INTERVAL 1 MICROSECOND
    , NOW() + INTERVAL 1 SECOND
    , NOW() + INTERVAL 1 MINUTE
    , NOW() + INTERVAL 1 HOUR
    , NOW() + INTERVAL 1 DAY
    , NOW() + INTERVAL 1 WEEK
    , NOW() + INTERVAL 1 MONTH
    , NOW() + INTERVAL 1 QUARTER
    , NOW() + INTERVAL 1 YEAR
    , NOW() + INTERVAL 1.111111 SECOND_MICROSECOND
    , NOW() + INTERVAL '01:01.111111' MINUTE_MICROSECOND
    , NOW() + INTERVAL '01:01' MINUTE_SECOND
    , NOW() + INTERVAL '01:01:01.111111' HOUR_MICROSECOND
    , NOW() + INTERVAL '01:01:01' HOUR_SECOND
    , NOW() + INTERVAL '01:01' HOUR_MINUTE
    , NOW() + INTERVAL '1 01:01:01.111111' DAY_MICROSECOND
    , NOW() + INTERVAL '1 01:01:01' DAY_SECOND
    , NOW() + INTERVAL '1 01:01' DAY_MINUTE
    , NOW() + INTERVAL '1 01' DAY_HOUR
    , NOW() + INTERVAL '1 1' YEAR_MONTH
\G

中にはMICROSECOND型で返ってくるものもあります。
当然これはこれで正ですが、見慣れた形式にしたい場合はCASTが覚えやすいと思います。

SELECT
    CAST(NOW() AS DATETIME)
    , CAST(NOW() AS DATE)
    , CAST(NOW() AS TIME)
\G

さらに細かく日付の形式を指定するならフォーマットを使います。

SELECT
    NOW()
    , DATE_FORMAT(NOW(), '%a') AS 'Abbreviated weekday name (Sun..Sat)'
    , DATE_FORMAT(NOW(), '%b') AS 'Abbreviated month name (Jan..Dec)'
    , DATE_FORMAT(NOW(), '%c') AS 'Month, numeric (0..12)'
    , DATE_FORMAT(NOW(), '%D') AS 'Day of the month with English suffix (0th, 1st, 2nd, 3rd, …)'
    , DATE_FORMAT(NOW(), '%d') AS 'Day of the month, numeric (00..31)'
    , DATE_FORMAT(NOW(), '%e') AS 'Day of the month, numeric (0..31)'
    , DATE_FORMAT(NOW(), '%f') AS 'Microseconds (000000..999999)'
    , DATE_FORMAT(NOW(), '%H') AS 'Hour (00..23)'
    , DATE_FORMAT(NOW(), '%h') AS 'Hour (01..12)'
    , DATE_FORMAT(NOW(), '%I') AS 'Hour (01..12)'
    , DATE_FORMAT(NOW(), '%i') AS 'Minutes, numeric (00..59)'
    , DATE_FORMAT(NOW(), '%j') AS 'Day of year (001..366)'
    , DATE_FORMAT(NOW(), '%k') AS 'Hour (0..23)'
    , DATE_FORMAT(NOW(), '%l') AS 'Hour (1..12)'
    , DATE_FORMAT(NOW(), '%M') AS 'Month name (January..December)'
    , DATE_FORMAT(NOW(), '%m') AS 'Month, numeric (00..12)'
    , DATE_FORMAT(NOW(), '%p') AS 'AM or PM'
    , DATE_FORMAT(NOW(), '%r') AS 'Time, 12-hour (hh:mm:ss followed by AM or PM)'
    , DATE_FORMAT(NOW(), '%S') AS 'Seconds (00..59)'
    , DATE_FORMAT(NOW(), '%s') AS 'Seconds (00..59)'
    , DATE_FORMAT(NOW(), '%T') AS 'Time, 24-hour (hh:mm:ss)'
    , DATE_FORMAT(NOW(), '%U') AS 'Week (00..53), where Sunday is the first day of the week; WEEK() mode 0'
    , DATE_FORMAT(NOW(), '%u') AS 'Week (00..53), where Monday is the first day of the week; WEEK() mode 1'
    , DATE_FORMAT(NOW(), '%V') AS 'Week (01..53), where Sunday is the first day of the week; WEEK() mode 2; used with %X'
    , DATE_FORMAT(NOW(), '%v') AS 'Week (01..53), where Monday is the first day of the week; WEEK() mode 3; used with %x'
    , DATE_FORMAT(NOW(), '%W') AS 'Weekday name (Sunday..Saturday)'
    , DATE_FORMAT(NOW(), '%w') AS 'Day of the week (0=Sunday..6=Saturday)'
    , DATE_FORMAT(NOW(), '%X') AS 'Year for the week where Sunday is the first day of the week, numeric, four digits; used with %V'
    , DATE_FORMAT(NOW(), '%x') AS 'Year for the week, where Monday is the first day of the week, numeric, four digits; used with %v'
    , DATE_FORMAT(NOW(), '%Y') AS 'Year, numeric, four digits'
    , DATE_FORMAT(NOW(), '%y') AS 'Year, numeric (two digits)'
    , DATE_FORMAT(NOW(), '%%') AS 'A literal “%” character'
    , DATE_FORMAT(NOW(), '%x') AS 'x, for any “x” not listed above'
\G


時刻形式からの展開

SELECT
    NOW()
    , EXTRACT(DAY FROM NOW())
    , EXTRACT(MICROSECOND FROM NOW())
    , EXTRACT(SECOND FROM NOW())
    , EXTRACT(MINUTE FROM NOW())
    , EXTRACT(HOUR FROM NOW())
    , EXTRACT(DAY FROM NOW())
    , EXTRACT(WEEK FROM NOW())
    , EXTRACT(MONTH FROM NOW())
    , EXTRACT(QUARTER FROM NOW())
    , EXTRACT(YEAR FROM NOW())
    , EXTRACT(SECOND_MICROSECOND FROM NOW())
    , EXTRACT(MINUTE_MICROSECOND FROM NOW())
    , EXTRACT(MINUTE_SECOND FROM NOW())
    , EXTRACT(HOUR_MICROSECOND FROM NOW())
    , EXTRACT(HOUR_SECOND FROM NOW())
    , EXTRACT(HOUR_MINUTE FROM NOW())
    , EXTRACT(DAY_MICROSECOND FROM NOW())
    , EXTRACT(DAY_SECOND FROM NOW())
    , EXTRACT(DAY_MINUTE FROM NOW())
    , EXTRACT(DAY_HOUR FROM NOW())
    , EXTRACT(YEAR_MONTH FROM NOW())
\G


UNIX TIMESTAMP

SELECT
    NOW()
    , UNIX_TIMESTAMP()
    , FROM_UNIXTIME(UNIX_TIMESTAMP())
    , FROM_UNIXTIME(UNIX_TIMESTAMP()) + 0
    , FROM_UNIXTIME(UNIX_TIMESTAMP(), '%Y %D %M %h:%i:%s %x')
\G

月末計算
日付を含む型であること。
有効は日付形式であること

SELECT
    NOW()
    , LAST_DAY(NOW())
    , LAST_DAY(CURDATE())
    ;


時刻、日付作成
MAKETIME()は0パディングされたフォーマットは受け付けない。

SELECT
    NOW()
    , MAKEDATE(EXTRACT(YEAR FROM NOW()), 1)
    , MAKEDATE(EXTRACT(YEAR FROM NOW()), 141)
    , MAKETIME(EXTRACT(HOUR FROM NOW())+0, EXTRACT(MINUTE FROM NOW())+0, EXTRACT(SECOND FROM NOW())+0)
    , MAKETIME(EXTRACT(HOUR FROM NOW())+1, EXTRACT(MINUTE FROM NOW())+1, EXTRACT(SECOND FROM NOW())+1)
\G


いわゆるstrptime()

-- Apacheのログから拾ってみたけど、MySQLはTimezoneのフォーマットがないのね(^_^;)
SELECT STR_TO_DATE('[16/Jan/2015:10:39:13 +0900]','[%d/%b/%Y:%T +0900]');


weekday
(0 = Monday, 1 = Tuesday, … 6 = Sunday).


SELECT
    NOW()
    , WEEKDAY(NOW() + INTERVAL 0 DAY)
    , WEEKDAY(NOW() + INTERVAL 1 DAY)
    , WEEKDAY(NOW() + INTERVAL 2 DAY)
    , WEEKDAY(NOW() + INTERVAL 3 DAY)
    , WEEKDAY(NOW() + INTERVAL 4 DAY)
    , WEEKDAY(NOW() + INTERVAL 5 DAY)
    , WEEKDAY(NOW() + INTERVAL 6 DAY)
\G


その他時刻差分とか出せるみたいだけど、こちらはUNIX TIMESTAMPを中継して
整数で計算した方が良いと思うの。
わかりやすいしね。
マイクロ秒まで考慮する必要があるならいいけど、MySQLのカラム型にマイクロ秒まで
考慮できるデータがあったっけ?
という感じです (^-^;)

でわでわ

拍手

postgresqlにはdescがないので、informationスキーマにあるテーブルを逐一確認しなければなりません。
仕方ないことなんだけど…

-- テーブル一覧
SELECT
  table_catalog
  , table_schema
  , table_name
  , table_type 
FROM
  information_schema.tables 
WHERE
  table_schema = '[schema_name]'; 

-- カラム一覧
SELECT
  * 
FROM
  information_schema.columns 
WHERE
  table_schema = '[schema_name]' 
ORDER BY
  table_name
  , ordinal_position; 






拍手

アクセスが10,000超えたようです。
ありがとうございます。

と、いってもコメントからするに、botさんたちばかりでしょうけどね(苦笑)

拍手

先日ちゃんとテストもしないで公開したら、バグがひどかったので修正します。
先日のは非公開にしまーす。

PostgreSQLのpg_dumpを
pg_dump db_name > db_name.dmp
見たく取得したはいいものの、実際にリストアするときに特定のテーブルだけ、リストアしたいねー
なんてことはよくあります。
と、いうことで、あまり大きいファイルには向かないけど、ファイルを分割するスクリプトをPythonで書いてみました。

python
import os
dump_file_path = './db_name.dmp'
dump_path = os.path.dirname(dump_file_path)
dump_file = os.path.basename(dump_file_path)

## define
# 処理を止める行数(0で最後まで)
break_point = 0
line_no = 0
file_no = 0
delimiter_flg = 0
prefix = u's'
init_file = True
log_file = '%s_log_%s' % (prefix, dump_file)

# main

# initialyze outputo file
if init_file:
  old = filter(lambda x: x.startswith(prefix), os.listdir(dump_path))
  for _file in old: os.unlink(os.path.join(dump_path, _file))

# splitting
f = open(dump_file_path, 'rb')
for line in f:
  line_no += 1
  if line.strip() == '--':
    if delimiter_flg == 2:
      delimiter_flg = 1
      file_no += 1
      print '次のセクションに移動しました。 処理行数[%s], 処理セクション[%s]' % (line_no, file_no)
    else:
      delimiter_flg += 1
  elif line.startswith('--'):
    open(log_file, 'ab').write('\t'.join([str(line_no), str(file_no), line]))
  open('%s%03d_%s' % (prefix, file_no, dump_file), 'ab').write(line)
  # print (file_no, delimiter_flg, line.strip())
  if 0 < break_point < line_no:
    break

f.close()

これでカレントディレクトリに分割されたファイルが出来上がるので
中身を確認しつつ、目的のテーブルのデータをダンプしてください。
INDEXとかは面倒だと思います。
そんな書き方はナンセンス!
なんてFBは随時受け付けますが、理解できないかもです(-_-;)

確認環境
Python2.7.3
PostgreSQL 9.3.3

拍手

しばらくninja Blogにログインできなかったのだけど、今日できましたemoji
なので、引き続きがんばりますねemoji
月一くらいになっちゃうのだけど…emoji

拍手

DNS落ちでしばらくこのブログそのものにアクセス出来ませんでしたが、復活させました。
忍者ツールズはこのへんちょっとだけわかりにくいのよね…(^^ゞ

相変わらずマイペースな更新になると思うけど、がんばりマスv

拍手

何事もそうだけどプライオリティをつけて作業をするってことは大事だと思うのよね。
忙しいならなおさら。

残念ながら人はシングルタスクでしか動くことができません。
中にはマルチで稼働するかたもいらっしゃると思いますが・・・

多くの人は集中力含め、同時に実施できる作業は一つではないでしょうか。

ITなどPCを操作することが多ければなおさらよね。
キーボード入力できるのはひとつの入力エリアだけだし。
打鍵(タイピング)しながら資料に目を通しても頭に入ってこないでしょう。

故に作業が複数ある場合は同時にはこなせないので、どれから着手するか、が重要になってきます。
一番簡単なのが、期限が付いていればいいのですが・・・
(すべての作業が期限ギリギリなんてこともあるけどねー)
着いていない場合はウェイトに応じて捌いていかないといけません。

しかし、これができない人がいるのよね。
今日までだって言っているのに、全く進捗がない。
うーん。
できないならできないでフラグを上げて欲しいし。

別のことやっていたなら、なぜ、今日中と言われたタスクに着手していないのでしょう?
私ははたはた疑問に思うのです。

わからなければ聞きましょう。
アウトプットの合う作業に納期を守ることは必要です。

仕事のできるできないってさ、
速さよりも、進め方なのかもね。

もっち品質は最優先よー ノシ

でわでわ

拍手

Copyright ©  アナログを愛するデジタル生活館 All Rights Reserved.
* material by Pearl Box   * Template by tsukika

忍者ブログ [PR]