1. データを準備するデータテーブルを作成する-- 「Jingdong」データベースを作成します。create database jing_dong charset=utf8; -- 「Jingdong」データベースを使用します。use jing_dong; -- 商品データテーブルを作成する create table goods( id int unsigned 主キー auto_increment nullではない、 名前varchar(150)がnullではありません、 cate_name varchar(40) NULLではない、 brand_name varchar(40) NULLではありません、 価格 小数点(10,3) nullでない デフォルト 0, is_showビットはNULLではないデフォルトは1、 is_saleoff ビットが null でない デフォルト 0 ); データの挿入-- goods テーブルにデータを挿入します。 insert into goods values(0,'r510vc 15.6 インチ ノートブック','notebook','ASUS','3399',default,default); 商品に値を挿入します(0,'y400n 14.0インチ ラップトップ','ノートブック','Lenovo','4999',default,default); 商品に値を挿入します(0,'g150th 15.6インチ ゲーミング ラップトップ','ゲーミング ラップトップ','Thor','8499',default,default); 商品に値を挿入します(0,'x550cc 15.6インチノートブック','notebook','ASUS','2799',default,default); 商品に値を挿入します(0,'x240 Ultrabook','Ultrabook','Lenovo','4880',default,default); 商品に値を挿入します(0,'u330p 13.3インチ ウルトラブック','Ultrabook','Lenovo','4299',default,default); 商品に値を挿入します(0,'svp13226scb touch ultrabook','ultrabook','Sony','7999',default,default); 商品に値を挿入します(0,'iPad mini 7.9インチタブレット','タブレット','Apple','1998',default,default); 商品に値を挿入します(0,'ipad air 9.7 inch tablet','tablet','Apple','3388',default,default); 商品に値(0,'iPad mini with Retina Display','タブレット','apple','2788',default,default)を挿入します。 商品に値を挿入します(0,'ideacentre c340 20インチオールインワンコンピューター','デスクトップ','Lenovo','3499',default,default); 商品に値を挿入します(0,'vostro 3800-r1206 デスクトップ コンピューター','デスクトップ','Dell','2899',default,default); 商品に値を挿入します(0,'imac me086ch/a 21.5インチ オールインワン コンピュータ','デスクトップ','Apple','9188',default,default); 商品に値を挿入します(0,'at7-7414lp デスクトップ コンピューター Linux )','デスクトップ','Acer','3699',default,default); 商品に値を挿入します(0,'z220sff f4f06pa ワークステーション','サーバー/ワークステーション','HP','4288',default,default); 商品に値を挿入します(0,'poweredge ii server','server/workstation','dell','5388',default,default); 商品に値を挿入します(0,'mac pro プロフェッショナル デスクトップ コンピュータ','サーバー/ワークステーション','Apple','28888',default,default); 商品に値を挿入します(0,'hmz-t3w ヘッドマウントディスプレイデバイス','ラップトップアクセサリ','Sony','6999',default,default); 商品に値を挿入します(0,'ビジネスバックパック','ラップトップアクセサリ','ソニー','99',default,default); 商品に値を挿入します(0,'x3250 m4 ラック サーバー','サーバー/ワークステーション','ibm','6888',default,default); 商品に値を挿入します(0,'ビジネスバックパック','ラップトップアクセサリ','ソニー','99',default,default); 2. SQLドリル1. SQL文の強化タイプ cate_name の製品名と価格を「Ultrabook」として照会します。 cate_name = 'Superbook' の場合、商品から名前、価格を選択します。 製品タイプを表示 cate_name によって goods グループから cate_name を選択します。 すべてのコンピュータ製品の平均価格を算出し、小数点以下2桁を残します goods から round(avg(price),2) を avg_price として選択します。 各商品の平均価格を表示します cate_name による商品グループから cate_name、avg(price) を選択します。 各タイプの製品の最も高価なもの、最も安価なもの、平均価格、数量を照会します cate_name によって goods グループから cate_name、max(price)、min(price)、avg(price)、count(*) を選択します。 平均価格より高い価格の商品をすべて照会し、価格の降順で並べ替えます 商品からID、名前、価格を選択 価格 > (select round(avg(price),2) as avg_price from goods) の場合 価格降順で並び替え; 各タイプの最も高価なコンピュータを見つける 商品から*を選択 内部結合 ( 選択 カテゴリ名、 max(price) を max_price として、 min(price) を min_price として、 avg(price) を avg_price として、 count(*) から商品グループを cate_name で取得 ) として goods_new_info goods.cate_name=goods_new_info.cate_name かつ goods.price=goods_new_info.max_price の場合; 2. 「製品カテゴリ」テーブルを作成する-- 商品カテゴリテーブルを作成する create table if not exists goods_cates( id int unsigned 主キー auto_increment, 名前varchar(40) nullではない ); 商品テーブル内の商品の種類を照会する cate_name によって goods グループから cate_name を選択します。 グループ化の結果をgoods_catesデータテーブルに書き込む goods_cates (name) に挿入し、cate_name で goods グループから cate_name を選択します。 3. テーブルデータを同期するgoods_catesデータテーブルを通じてgoodsテーブルを更新する goods を g として更新し、内部結合 goods_cates を c として g.cate_name=c.name に設定し、g.cate_name=c.id を設定します。 4. 「製品ブランドテーブル」テーブルを作成する作成...選択を使用して、データ テーブルを作成し、同時に 1 ステップずつレコードを書き込みます。 -- brand_name によって商品グループから brand_name を選択します。 -- データテーブルを作成するときにデータを一緒に挿入します -- 注意: 別名 brand_name を使用する必要があります。そうしないと、名前フィールドに値が設定されません。create table goods_brands ( id int unsigned 主キー auto_increment, name varchar(40) not null) brand_name を商品グループから名前として選択します。brand_name でグループ化します。 5. データを同期するgoods_brandsデータテーブルを通じて商品データテーブルを更新する goods を g として更新し、g.brand_name=b.name で goods_brands を b として内部結合し、g.brand_name=b.id を設定します。 6. テーブル構造を変更するgoods のデータ テーブル構造を見ると、cate_name と brand_name の対応する型は varchar ですが、すべて数値であることがわかります。 desc商品; alter tableステートメントを使用してテーブル構造を変更する テーブル用品の変更 cate_name cate_id int unsigned not null を変更します。 brand_name brand_id int unsigned not null を変更します。 7. 外部キーそれぞれgoods_catesテーブルとgoods_brandsテーブルにレコードを挿入します。 goods_cates(name) に値 ('ルーター'),('スイッチ'),('ネットワークカード') を挿入します。 goods_brands(name) に値 ('Haier'),('Tsinghua Tongfang'),('Shenzhou'); を挿入します。 商品テーブルに任意のレコードを書き込む 商品に挿入 (名前、カテゴリ ID、ブランド ID、価格) values('LaserJet Pro P1606dn 白黒レーザープリンター', 12, 4,'1849'); すべての製品の詳細情報を照会する(内部接続経由) g.id、g.name、c.name、b.name、g.price を goods から g として選択します。 内部結合 goods_cates を c として g.cate_id=c.id に結合します。 g.brand_id=b.id に対して、goods_brands を b として内部結合します。 すべての製品の詳細情報を照会する(左結合経由) g.id、g.name、c.name、b.name、g.price を goods から g として選択します。 g.cate_id=c.id に goods_cates を c として結合します g.brand_id=b.id で goods_brands を b として結合します。
-- brand_id に外部キー制約を正常に追加しました。alter table goods add foreign key (brand_id) references goods_brands(id); -- cate_id に外部キーを追加できませんでした -- エラー 1452 が表示されます -- エラーの原因: 存在しない cate_id 値 12 が追加されたため、最初に削除する必要があります alter table goods add foreign key (cate_id) references goods_cates(id);
テーブル商品を作成する( id int 主キー auto_increment nullではない、 名前 varchar(40) デフォルト '' 価格小数点(5,2) cate_id int 符号なし、 ブランドID int 符号なし、 is_showビットデフォルト1、 is_saleoff ビット デフォルト 0、 外部キー(cate_id)はgoods_cates(id)を参照します。 外部キー(brand_id)はgoods_brand(id)を参照します。 ); 外部キー制約を削除する方法 -- 最初に外部キー制約名を取得する必要があります。名前はシステムによって自動的に生成されます。テーブル作成ステートメント show create table goods; を表示することで名前を取得できます。 -- 名前を取得した後、名前に従って外部キー制約を削除できます。alter table goods drop foreign key foreign key name; 実際の開発では、外部キー制約はほとんど使用されないため、テーブル更新の効率が大幅に低下します。 3. データベース設計「製品カテゴリ」テーブルを作成します(以前に作成されているため、再度作成する必要はありません)テーブル goods_cates を作成する( id int unsigned 主キー auto_increment nullではない、 名前varchar(40) nullではない ); 「製品ブランド」テーブルを作成します(すでに作成されているため、再度作成する必要はありません)テーブル goods_brands を作成する ( id int unsigned 主キー auto_increment nullではない、 名前varchar(40) nullではない ); 「製品」テーブルを作成します(すでに作成されているため、再度作成する必要はありません)テーブル商品を作成する( id int unsigned 主キー auto_increment nullではない、 名前 varchar(40) デフォルト '' 価格小数点(5,2)、 cate_id int 符号なし、 brand_id int 符号なし、 is_showビットデフォルト1、 is_saleoff ビット デフォルト 0、 外部キー(cate_id)はgoods_cates(id)を参照します。 外部キー(brand_id)はgoods_brand(id)を参照します。 ); 「顧客」テーブルを作成する顧客テーブルを作成( id int unsigned auto_increment 主キーがnullでない、 名前varchar(30)がnullではない、 アドレスvarchar(100)、 tel varchar(11) が null でない ); 「注文」テーブルを作成するテーブル注文を作成する( id int unsigned auto_increment 主キーがnullでない、 order_date_time datetime が null ではない、 customer_id int 符号なし、 外部キー(customer_id)はcustomer(id)を参照します ); 「注文詳細」テーブルを作成するテーブル order_detail を作成します( id int unsigned auto_increment 主キーがnullでない、 order_id int unsigned not null、 goods_id int unsigned not null、 数量 tinyint unsigned not null、 外部キー(order_id)はorders(id)を参照します。 外部キー(goods_id)はgoods(id)を参照します ); 例示する
4. PythonでMySQLを操作する手順モジュールのインポートpymysqlモジュールをpyファイルにインポートする pymysql からのインポート * 接続オブジェクト
conn=connect(パラメータリスト)
オブジェクトメソッド
カーソルオブジェクト
cs1 = conn.カーソル() オブジェクトメソッド
オブジェクトのプロパティ
5. 追加、削除、変更、確認pymysql からのインポート * main() を定義します: # 接続の作成 conn = connect(host='localhost',port=3306,database='jing_dong',user='root',password='mysql',charset='utf8') # カーソルオブジェクトを取得する cs1 = conn.cursor() # 挿入ステートメントを実行し、影響を受ける行数を返します。データを追加します。# count を増やします = cs1.execute('insert into goods_cates(name) values("hard disk")') #影響を受けた行の数を出力します print(count) count = cs1.execute('goods_cates(name) に値("CD") を挿入') 印刷(カウント) # # 更新 # count = cs1.execute('update goods_cates set name="Mechanical hard disk" where name="Hard disk"') # # 削除 # count = cs1.execute('delete from goods_cates where id=6') # 前回の操作を送信します。以前に複数回実行したことがある場合は、すべて送信します。conn.commit() # カーソルオブジェクトを閉じる cs1.close() # 接続オブジェクトを閉じる conn.close() __name__ == '__main__' の場合: 主要() データの行をクエリするpymysql からのインポート * main() を定義します: # 接続の作成 conn = connect(host='localhost',port=3306,user='root',password='mysql',database='jing_dong',charset='utf8') # カーソルオブジェクトを取得する cs1 = conn.cursor() # 選択ステートメントを実行し、影響を受ける行の数を返します。データのクエリ count = cs1.execute('select id,name from goods where id>=4') # 影響を受けた行の数を出力します print("%d 個のデータが見つかりました: " % count) i が範囲(カウント)内にある場合: # クエリ結果を取得する result = cs1.fetchone() # クエリ結果を印刷する print(result) # クエリ結果を取得する # Cursor オブジェクトを閉じる cs1.close() 接続を閉じる() __name__ == '__main__' の場合: 主要() 複数行のデータをクエリするpymysql からのインポート * main() を定義します: # 接続の作成 conn = connect(host='localhost',port=3306,user='root',password='mysql',database='jing_dong',charset='utf8') # カーソルオブジェクトを取得する cs1 = conn.cursor() # 選択ステートメントを実行し、影響を受けた行の数を返します。データのクエリ count = cs1.execute('select id,name from goods where id>=4') # 影響を受けた行の数を出力します print("%d 個のデータが見つかりました: " % count) # i が範囲(count)内にある場合: # # クエリ結果を取得する# result = cs1.fetchone() # # クエリ結果を印刷する# print(result) # # クエリ結果を取得する result = cs1.fetchall() 印刷(結果) # カーソルオブジェクトを閉じる cs1.close() 接続を閉じる() __name__ == '__main__' の場合: 主要() 6. パラメータ化
pymysql からのインポート * main() を定義します: find_name = input("アイテムの名前を入力してください:") # 接続の作成 conn = connect(host='localhost',port=3306,user='root',password='mysql',database='jing_dong',charset='utf8') # カーソルオブジェクトを取得する cs1 = conn.cursor() # # 安全でないメソッド # # " または 1=1 または " と入力します (二重引用符も入力します) # sql = 'select * from goods where name="%s"' % find_name # print("""sql===>%s<====""" % sql) # # 選択ステートメントを実行し、影響を受けた行の数を返します。すべてのデータをクエリします # count = cs1.execute(sql) # 安全な方法 # パラメータリストを構築する params = [find_name] # 選択ステートメントを実行し、影響を受けた行の数を返します: すべてのデータをクエリ count = cs1.execute('select * from goods where name=%s', params) # 知らせ: # 複数のパラメータがある場合は、パラメータ化が必要です。 # params = [値 1、値 2....] の場合、SQL ステートメントには複数の %s があります。 # 影響を受ける行の数を出力します print(count) # クエリ結果を取得# result = cs1.fetchone() 結果 = cs1.fetchall() # クエリ結果を印刷する print(result) # カーソルオブジェクトを閉じる cs1.close() # 接続オブジェクトを閉じる conn.close() __name__ == '__main__' の場合: 主要() 上記はMySQLとPythonの連携例の詳細です。MySQLとPythonの連携の詳細については、123WORDPRESS.COMの他の関連記事に注目してください。 以下もご興味があるかもしれません:
|
序文退社前に、ある依頼を受けました。基本イメージ規格の変更により、最新の Docker イメージ規格...
オールラウンドなシステム監視ツール dstat dstat は、vmstat、iostat、nets...
目次1. メニューをクリックしてジャンプ1. ページ名の統一2. 管理ページを追加3. ルートを追加...
初心者は、いくつかの HTML タグを理解することで HTML を学習できます。この入門書は、初心者...
目次シンボルデータタイプシンボルが表示される理由シンボルの特徴シンボルの応用rbオブジェクトにupメ...
目次1. データベースとは何ですか? 2. データベースの分類は? 3. データベースとデータ構造の...
1. nacosデータベースを再開します。データベース名nacos_configユーザー名とパスワー...
目次概要1. NULL値のテスト2. ユーザー入力を読み取る導入事実の根源はどこにあるのでしょうか?...
Dockerfile内の指定されたファイルに複数の行を追加します。echoの後の「$」記号に注意し...
目次1. はじめに2. JDBCはストリーミングクエリを実装する3. パフォーマンステスト3.1. ...
背景前景要素から特定の色を継承する影の効果を作成する方法を知りたいと思ったことはありませんか?方法に...
inline-flex は inline-block と同じです。内部要素用の display:fl...
Promise は、ES6 で導入された非同期プログラミングのための新しいソリューションです。 Pr...
目次1. 画像1. 鏡とは何ですか? 2. 画像の構成と目的(1) Dockerファイル(2)スクラ...
目次Promise の基本的な使用法: 1. Promiseオブジェクトを作成する2. プロミス方式...