データベース操作(C)

データベース操作(C)

インストールがメインインターフェイスに開いた後、その後のNavicatツール]をダウンロードする公式サイトでは良いばかにショートカットをダブルクリックします。

    IMG

mysqlクライアントとして、我々は、MySQLサーバを接続する必要があります

    IMGポップアップインタフェース入力MySQLサーバーのIPアドレスとポートだけでなく、ユーザー名とパスワードMySQLで

IMG

    IMG

    IMG

    IMG

    IMG

    IMG

    

    IMG

    

    IMG

照合について、私たちは、これら二つのブログを見て理解します:

      https://www.cnblogs.com/adforce/p/3282404.html

      https://www.jb51.net/article/48775.htm

データベースを構築し、上記の手順で[OK]をクリックします:

    IMG

その後、我々は、データベース内に新しいテーブルの上に行ってきました

    IMG

    IMG

    

    IMG

つまり、我々は、マウスをクリックすることで、対応するSQL文を生成するために実行するために行きます

[保存]をクリックします:

    IMG

このテーブルが生成されます。

    IMG

私たちは、コマンドラインを見てみることを行ってきました信じてはいけない:このテーブルには存在しています

    IMG

我々は、直接コマンドライン操作が非常に煩雑であるため、その上にデータベースを操作するために、このツールを使用した後

その後、我々は、外部キーの確立を見て

    IMG

    IMG

その後、自動的に対応するSQL文を生成し、

    IMG

    

    IMG

    IMG

[保存]をクリックし、テーブルから、テーブルがあります

    IMG

そして、データを挿入することができ、上記の表の名前をダブルクリックします

    IMG

それはidフィールドが自動インクリメントを行う方法となり作るために、のは、テーブルの上に私たちのidフィールドは、DEPの増分を設定されていない、私はそれを変更したいとしましょう

設計テーブル:

    IMG

    

    IMG

次に、どのようにそれをテーブルを削除してから再作成し、我々はそれを行うにはありますか?別の関連テーブルは、あなたは確かにあなたは、あなたが外部キー関係が関連付けられていることを最初の表は、キャンセル、または最初の外部キーテーブルを削除するためになる必要があることをやらないであろう

    IMG

その後、外部キーが関連付けられたテーブルを削除し、保存します

我々は、DEPテーブルのidフィールドプラスインクリメントするIDフィールド内の増分というidフィールドを与えて保存し、再度DEPにemp表の外部キーにしたいです

DEPのデータテーブルには、いくつか挿入します

    IMG

    IMG

    このツールはまた、あなたを表示するグラフィックスの形であなたのテーブル間の関係になります

    IMG

    IMG

 ERダイアグラムをクリックして、両者の間のグラフは、その後、あなたのテーブルに多くの時間の未来は、あなたが結果を表示するには、このチャートを介して自分のテーブルとテーブル間の関係を見ることができます表示されます。

    IMG

我々は2つのテーブル間のラインをクリックすると、我々は2つの間の関係を見ることができます:

    IMG

 また、テーブル間のリレーションシップを作成し、直接チャートを作成するには、上記のモデルを選択することができます

    IMG

    IMG

 しかし、私たちが確立したこのモデルは、データベース内で直接作成することはできません、あなたはSQLの形でそれをインポートする必要があることは、その後、内部実行するSQL文をデータベースにエクスポートします

    IMG

 そして、場所を保存するエクスポート

    IMG

我々は内部の何を見て、エクスポートされたファイルを開きます。

   IMG

 これは、これらのステートメントでSQL文、SQLレプリケーションに翻訳作成したモデルですが、mysqlはそれを実行するための内部で、我々は二つのテーブルの内部をモデル化するまで待つだけ、と非常に便利

Navicatのツールは、データベースを操作するためにネイティブのSQL文を書くことができます

    IMG

SQL文の入力インタフェースを表示するには:

    IMG

そして、SQL文を記述してみてください:

    IMG

    IMG

そして、それを実行します。

     IMG

 また、NavicatはでデータベースにSQLファイルの形式で、データのうち、データベース前に導くことができます。

 まず、私たちは、新しいライブラリを作成します。

      IMG

  その後、右クリックして[ファイル名を指定して実行するSQLファイルを選択し、データベースを選択します。

      IMG

      IMG

      IMG

  上記のステップは、直接オフ、起動するには、再度クリックしないことに注意してください

      IMG

 その後、ER図では、非常にはっきりと見るために、各テーブル間の関係を見てみましょう。

2.pymysqlモジュール

pymysqlのMySQLは、Pythonの最後にクライアントソケットを実行している、Pythonで動作しています。

#安装
pip install pymysql
import pymysql

conn = pymysql.connect(
        host = '127.0.0.1',   #主机ip
        port = 3306,          #端口号
        user = 'root',          #用户名
        password = '123',     #密码
        database = 'learn',   #需要连接的库
        charset = 'utf8')    
cursor = conn.cursor()   #游标相当于命令行的 mysql>
#cursor = conn.cursor(pymysql.cursors.DictCursor)  
#默认游标取出的数据结构为元组类型即((),()...),DictCusor获取字典数据类型,对应的数据结构是[{},{}..]
sql = 'select * from dep;'
ret = cuosor.execute(sql)    #ret为受影响的行数
print(ret)
print(cursor.fetchone())  #取出单条数据记录
print(cursor.fetchmany(3))  #取出多条,即取出3条数据记录
print(cursor.fetchall())   #取出全部数据记录

cursor.scroll(2,'absolute') 
#absolute 绝对移动,相对于数据最开始的位置进行光标的移动
cursor.scroll(2,'relative')
#relative 相对移动,按照光标当前位置来进行光标的移动

conn.commit()  #增删改都必须进行提交操作(commit)

cursor.close() #关闭游标
conn.close()   #关闭连接




ps:
print(cursor.lastrowid)  #获取插入的最后一条数据的自增ID
sql注入:
    
    
#我们来使用数据来进行一下用户名和密码的认证操作
import pymysql

conn = pymysql.connect(
    host='127.0.0.1',
    port=3306,
    user='root',
    password='666',
    database='crm',
    charset='utf8'
)

cursor = conn.cursor(pymysql.cursors.DictCursor)
uname = input('请输入用户名:')
pword = input('请输入密码:')

sql = "select * from userinfo where username='%s' and password='%s';"%(uname,pword)

res = cursor.execute(sql) #行数受到影响则不为0,即True

print(res) 
if res:
    print('登陆成功')
else:
    print('用户名和密码错误!')

#通过上面的验证方式,比我们使用文件来保存用户名和密码信息的来进行验证操作要方便很多。


但是
1.知道用户名不知道密码的情况下输入(asfdf为随意输入的字符)
uname:asfdf' -- 
pword:随意输入   
发现也可以登陆成功,是利用了mysql中 -- 注释的方法修改了mysql指令
2.不知道用户名也不知道密码的情况下输入
uname:asfdf' or 1 =1 -- 
pword:随意输入
发现也可以登陆成功,是利用了注释加or运算修改了mysql指令

这就是mysql注入的问题,解决办法:
    cursor.execute(sql,[参数1,参数2...])
    
即:
    
import pymysql

conn = pymysql.connect(
    host='127.0.0.1',
    port=3306,
    user='root',
    password='666',
    database='crm',
    charset='utf8'
)

cursor = conn.cursor(pymysql.cursors.DictCursor)
uname = input('请输入用户名:')
pword = input('请输入密码:')

sql = "select * from userinfo where username='%s' and password='%s';"

res = cursor.execute(sql,[uname,pword]) #行数受到影响则不为0,即True

print(res) 
if res:
    print('登陆成功')
else:
    print('用户名和密码错误!')

おすすめ

転載: www.cnblogs.com/tutougold/p/11455764.html