mysql チュートリアルコラム Python フルスタック解説データベース
推奨 (無料): mysql チュートリアル
主に 3 つの側面:
1.Linux ターミナル コマンド
#2.MySQL ステートメント
##3.Python 呼び出し##ターミナル コマンド:
vi。Python3-Pip Pip3 Pip Ient Installation Client Duan
## sudo apt-getアップデートの読み取り値の保存/var/lib/apt/list/lists sudo apt-アップグレードの取得 /init.d/mysql status ステータスのクエリsudo /etc/init.d/mysql stop サービスの停止sudo /etc/init.d/mysql restart サービスの再起動sudo /etc/init.d/mysql reload Reloadmysql -h ホスト アドレス-u ユーザー名-p パスワード リンク mysqlmysql のデフォルトの文字セットを変更します:# #
## sudo -iファイル許可を変更
# CDなど/mysql/mysql.conf.dディレクトリ
CPなど/msql.cnf/mysqld.cnf.bak 4.バックアップ
# SUBL mysqld.cnfソースファイルを開きます
# [mysqld]ディレクトリ
Character_set_server = utf8 ,,
データのバックアップ:
parameters: - All -Databases 1.すべてのライブラリ。単一のライブラリ#-バックアップライブラリ 1 ライブラリ 2. 3. 複数のライブラリをバックアップしますライブラリ名テーブル 1 テーブル 2… 1. バックアップ データベースを復元します
mysql -uroot -p –one-database ターゲット データベース名
sudo -i 1. 管理者モード
cd /etc/mysql/mysql.conf.d/ 2 .cd to the mysql directoryvi mysqld.cnf 3. デフォルトの IP
#bind-address = 127.0 を開いてコメントアウトします。 .0.1 4.
/etc/init. D/MySQL RESTART を保存 5. サービスを再起動
授 承認されたユーザー:g 授 授d. Grant オプションを使用した場合 1. コマンド形式
例: Grant オプションを使用して、「123」で識別される「tiger"@"%" に *.* 上のすべての権限を付与します。2.例all 権限 、Select、Insert ... 4. Library.Form: *. *すべてのライブラリ、すべてのテーブル 3. 権限リスト
Python3 モジュールのインストール:モジュール名前: pymysql
オンライン: sudo pip3 install pymysql
オフライン: pymysql-0.7.11.tar.gz
$ tar -zxvf pymyql- 0.7.11.tar.gz
$ cd pymysql-0.7.11
$ sudo python3 setup.py install
検証:
$ python3
$ python3
>>> import pymysql
> mysql-pythonのインストール
sqlalchemyフレームワークのインストール:オンライン: sudo pip3 install sqlalchemy
オフライン:
$ tar -zxvf SQLAlchemy-1.2.10.tar.gz
$ cd SQLAlchemy-1.2.10 $ sudo python3 setup.py install
検証:
$ python3
,,,,,,,,,,, import * import module
(db = pymysql.connect (...)) 1. データベース接続を作成します
C = db.cursor ()) 2. c.execute(“insert….” )カーソル方法:
db.commit()4。データベースに提出
## c.close()db.close()
7.connect オブジェクト:
db = pymysql.connect (パラメータ リスト)
1. host: ホスト アドレス、localhost
2. ポート: ポート番号、デフォルト 3306
3. ユーザー: ユーザー名
# 4. パスワード: パスワード
5. データベース: データベース
6. 文字セット: エンコード方法。utf8
8 を使用することをお勧めします。オブジェクトの接続方法:
データベース接続オブジェクト( db) メソッド
1. db.close() は接続を閉じます
2. db.commit() は実行のためにデータベースに送信します
3. db. rollback() は Roll
を返します。 4. cur = db.cursor() は、特定の SQL コマンドの実行に使用されるカーソル オブジェクトを返します。
9.メソッドカーソルオブジェクト:
カーソルオブジェクト(cur)のメソッド
1. cur.execute(sql command, [list]) SQLコマンドを実行します
2. cur .close() カーソルオブジェクトを閉じる
3, Cur.Fetchone () クエリ結果セットの最初のデータを取得します
((レコード 1),)
## 4, cur .fetchmany(n)get n records #((レコード1)、(レコード2)) 5. cur.fetchall()すべてのレコード## ORM:orm (Object Relation Mapping オブジェクト リレーショナル マッピング) 定義: オブジェクト モデルを MySQL データベースにマッピング
SQL コマンド:## #/var/lib/mysql queryコミットトランザクション
# select database();
# Use ライブラリ名を使用、ライブラリを切り替え
# データベース ライブラリ名を削除、ライブラリを削除
Showテーブル; すでにテーブルがあることを参照してください
テーブルを作成テーブル名 (フィールド名 1 データ型、....); テーブルの文字セットを表示
#insert into table name names (value 1), (value 2)...; 完全なレコードを挿入
insert into table name (フィールド名前 1,...) 値 (値 1 ),...; フィールド データを挿入
select * from テーブル名 [where 条件]; 名前 2,...テーブル名[Where条件];フィールドを表示
ALTER TABLE NAME ADD FIELD NAMEデータタイプ。 name フィールド名を削除;
sex enum ("M","F","S") not null default "S" 制約
変数名などの変数を表示; クエリMySQL 変数
テーブル名リストからフィールド名リストを選択; ,t2 where 条件
#テーブル名から一意のインデックスを表示;
Non_unique:0:ユニーク。外部キーを削除
外部キー (参照フィールド名)
カスケード アクションの削除オンカスケード アクションの更新);
外部キーの追加:alter table table name add
外部キー (参照フィールド) はメイン テーブル (参照フィールド) を参照します)
on delete …
on update …
カスケードアクション:restrict (デフォルト) はマスターテーブルを許可しませんスレーブ テーブルを操作するには
カスケード: 削除と更新を実行します
set null: マスター テーブルが変更された後、スレーブ テーブルの値は NULL になります
内部リンク: #テーブル 1 からフィールド名を選択条件で内部結合テーブル 2
条件で内部結合テーブル 3...;外部リンク。左のリンク:
左のテーブルに基づいてクエリ結果を表示テーブル 1 からフィールド名を選択
LEFT JOIN テーブル 2 ON 条件 LEFT JOIN テーブル 3 ON 条件…;右リンク
## これは、クエリ結果を表示するために右側のテーブルに表示されます
##データ インポート:
ファイル「ファイル名」にデータをロードしますテーブル テーブル名フィールド「区切り文字」で終了
#「n」で終了する行;データ エクスポート:
テーブル名から…を選択into outfile "/var/lib/mysql-files/ファイル名"
フィールドは「区切り文字」で終了行は「n」で終了;データリカバリ:
単一ライブラリを復元しますmysql -uroot -p abb8bc1e48a9dd4de2cff3f301f8d1d3 ~/xxx.sql
–all-databases バックアップ すべてのライブラリライブラリ名 単一のライブラリをバックアップします。-B ライブラリ 1 ライブラリ 2.. 複数のライブラリをバックアップします。ライブラリ名テーブル 1 テーブル 2... 指定したライブラリをバックアップします。指定したテーブル実行時間の検出: オンにする: set profiling=1;
オフにする: set profiling=0;
クエリ実行記録: show profilings;
SQL クエリ:
3.select … テーブル名からの集計関数 1.where2.group by…4.having …5.order by …6.limit …;
クエリのネスト:
select ... from テーブル名 where 条件 (select ....);## where
(country,gongji) in
(select country,max(gongji)国別グループから Sanguo から);
where: テーブルに実際に存在するフィールドのみ操作可能
group by: クエリ結果をグループ化します
having: さらにフィルタリングします。クエリ結果
独特:重複したフィールド値を表示しない# show engines;#
## Alter table name engine = innodb;ストレージエンジンの追加InnoDB:
InnoDB 機能 (2 ファイル):
行レベルのロック、外部キーのサポート、トランザクション操作
.frm (テーブル構造、インデックス)、.ibd (テーブル レコード)
MyISAM:
MyISAM の機能 (3 ファイル): .myi (インデックス)
ロック:select: 読み取りロックの追加後、他のユーザーはテーブル レコードを変更できませんが、クエリは可能です。 insert、delete、update: 書き込みロックの追加後、他のユーザーはチェックまたは更新できません。変更してください
ロック粒度:
テーブルレベルのロック: myisam
行レベルのロック: innodb
チューニング:1. 適切なストレージ エンジンを選択する 2. 共通フィールドにインデックスを作成する
3. 避けるべき場所 !=、NULL 判定、またはリンクの使用
フィールドの代わりに %、in、ではなく、* が前に付くようなものです。
データ型:データ型: int 「 」 ' 一緒に ' t ' を通じて ' through ' through ' to ' t out out out through out out out out out out through out through '''' ' ' ' ' ' through ' s ‐ w ‐ w t t i s t t Signed (署名済み)デフォルト): -128 ~ 127
整数型 (8 バイト)
float Float (4 バイト、有効数字 7 桁)
フィールド名 float (m, n) )M:数字の総数n:10進数
# decimalを使用して、4バイトに詰め込まれた
#残りバイト
0 0
1-2 1
3-4 2
5 -6 3
7-9 4
フィールド名 enum (値 1, 値 2...); 2 ...); 複数選択 (セット)
(複数の場合は 1 つの文字列にまとめて区切ります)
日付: "yyyy-mm-dd"
time: "HH:MM:SS"
datetime: "YYYY-MM-DD HH:MM:SS"
タイムスタンプ: "YYYY-MM-DD HH:MM:SS"
datetime: 値が指定されない場合はデフォルトで Null が返されます
timestamp: 値が指定されない場合はデフォルトでシステム時刻が返されます
Time関数
now() Time
Curdate () 現在の期間に戻る
# Curtime () 現在の日付に戻る
## year(date)指定された時間に戻ります
##max (フィールド名): 最大値 min (フィールド名): 最小値 count (フィールド名): このフィールドの数をカウントします演算子: – * / %Time 演算子select * from table namewhere フィールド名演算子 (Time-interval 時間間隔単位);# #時間間隔の単位: 1 日 | 2 時間 | 1 分 | 2 年 | 月
値の比較: = != > >= < < ;=
文字比較: = !=
論理比較: and or
範囲内の比較:
1. 値 1 と値 2 の間のフィールド名
# 2. (値 1、値 2、…) のフィールド名 3. フィールド名が含まれていない場合 (値 1、値 2、...) 空: 名前が null の場合空でない: 名前が null ではないNILL: Null 値。一致するか一致しない場合のみ使用できます。 "": 空の文字列。一致するには = または != を使用します。 あいまい比較: ここで、式のようなフィールド名 式 _: 単一の文字に一致します %: 0 から複数の文字に一致します NULL はカウントされません並べ替え: ASC | DESC 順表示: 表示開始位置、項目数を制限 ページごとに n レコードを表示、ページ m: 制限 (m-1)*n, n
MySQL と Python の相互作用
# mysqlpython.py # 导入mysql模块 from pymysql import * class MysqlPython: def __init__(self, database, # 库 host="127.0.0.1", # ip地址 user="root", # 用户名 password="123456", # 密码 port=3306, # 端口 charset="utf8"): # 字符集 self.host = host self.database = database self.user = user self.password = password self.port = port self.charset = charset def open(self): # 创建数据库链接函数 self.db = connect(host=self.host, database=self.database, user=self.user, password=self.password, port=self.port, charset=self.charset) self.cur = self.db.cursor() # 创建游标对象 def close(self): # 创建断开数据库链接 关闭游标函数 self.cur.close() self.db.close() def zhixing(self, sql, L=[]): # 创建pymysql.execute() 方法函数 try: self.open() # 链接数据库 self.cur.execute(sql, L) # 参数化执行SQL命令 self.db.commit() # 提交数据 print("ok") except Exception as e: self.db.rollback() # 出错取消提交 print("Failed", e) self.close() # 断开数据库链接 关闭游标 def all(self, sql, L=[]): try: self.open() self.cur.execute(sql, L) result = self.cur.fetchall() return result except Exception as e: print("Failed", e) self.close()
データベース ユーザー ログイン
from mysqlpython import Mysqlpython from hashlib import sha1 uname = input("请输入用户名:") pwd = input("请输入密码:") # 用sha1给pwd加密 s1 = sha1() # 创建sha1加密对象 s1.update(pwd.encode("utf8")) # 指定编码 pwd2 = s1.hexdigest() # 返回16进制加密结果 sqlh = Mysqlpython("db4") select = "select password from user where username=%s;" result = sqlh.all(select, [uname]) # print(result) # (('7c4a8d09ca3762af61e59520943dc26494f8941b',),) if len(result) == 0: print("用户名不存在") elif result[0][0] == pwd2: print("登录成功") else: print("密码错误")
ORM sqlalchemy フレームワーク
# 创建一张表 # 连接数据库的模块 from sqlalchemy import create_engine fromsqlalchemy.ext.declarative import declarative_base from sqlalchemy import Column, Integer ,String engine = create_engine("mysql+pymysql://root:123456@localhost/db4", encoding="utf8") Base = declarative_base() # orm基类 class User(Base): # 继承Base基类 __tablename__ = "t123" id =Column(Integer, primary_key=True) name = Column(String(20)) address = Column(String(40))Base.metadata.create_all (engine)
以上がMySQL データベースの Python フルスタック入門の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。