ホームページ  >  記事  >  データベース  >  MySQL データベースの Python フルスタック入門

MySQL データベースの Python フルスタック入門

coldplay.xixi
coldplay.xixi転載
2020-12-17 10:38:482217ブラウズ

mysql チュートリアルコラム Python フルスタック解説データベース

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 Reload

mysql -h ホスト アドレス-u ユーザー名-p パスワード リンク mysql

mysql のデフォルトの文字セットを変更します:# #

## 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 ターゲット データベース名 復元: テーブルは削除されず、テーブル レコードは削除されます。オーバーライド

MySQL リモート接続:

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コミットトランザクション
  • begin; open transaction
  • commit;トランザクションの終了
  • system sudo -i ターミナルを直接入力する
  • show データベースs; データベースデータベース名文字セット utf8; 文字セット
  • # select database();

  • # Use ライブラリ名を使用、ライブラリを切り替え

  • # データベース ライブラリ名を削除、ライブラリを削除

  • Showテーブル; すでにテーブルがあることを参照してください

  • テーブルを作成テーブル名 (フィールド名 1 データ型、....); テーブルの文字セットを表示

  • # #desc テーブル名;

    #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 フィールド名を削除;

  • ##テーブル テーブル名を変更 テーブル名を変更; テーブル レコードを削除 (どこに追加する必要があります)

  • #テーブル名セット フィールド 1 を更新=値 1、フィールド名 2=値 2、...どこ条件 テーブル レコードの変更 (どこに追加する必要があります)
  • テーブル テーブル名の変更 元の名前の変更 新しい名前のデータ型; 作成table テーブル名 select * from テーブル名 where false;
  • sex enum ("M","F","S") not null default "S" 制約

  • 変数名などの変数を表示; クエリMySQL 変数

  • テーブル名リストからフィールド名リストを選択; ,t2 where 条件

  • #テーブル名にインデックスインデックス名を作成(フィールド名); .index (フィールド名), ...) テーブルを作成するときに、名前の名前に共通インデックスを作成します。
  • # Drop Index インデックスを名前に付けます。テーブル名からインデックスを表示;

  • create table テーブル名 (….、一意のキー (フィールド名));
  • #テーブル名から一意のインデックスを表示;

  • #create table テーブル名 (…., id int, 主キー (フィールド名)); テーブル作成時に主キーインデックスを作成します
  • (id int Primary key auto_increment ,) auto_increment=10000; 自動インクリメントの開始値を設定します
  • alter table table name edit id int auto_increment; Table name Auto_increment = 20000; 開始値を開始値
  • から変更します。

  • ALテーブル名IDを変更する;名前ドロッププライマリキー;ビューテーブルキー) ‐ ‐ ‐‐ n‐‐、1 対 1 対 1 対 1 対 1
  • Non_unique:0:ユニーク。外部キーを削除

  • ## show create table name;();

    Create Table T2(#
  • ##…
  • 外部キー (参照フィールド名)

  • 参照メイン テーブル (参照フィールド名)

カスケード アクションの削除オンカスケード アクションの更新);

外部キーの追加:

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.where

2.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 name

where フィールド名演算子 (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)
# ((&#39;7c4a8d09ca3762af61e59520943dc26494f8941b&#39;,),)

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 サイトの他の関連記事を参照してください。

声明:
この記事はcsdn.netで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。