MySQLとのPython統合でAttributeErrorが発生する: モジュール 'socket' には 'AF_UNIX' という属性がない
2022-01-24 14:26:17
ランタイム環境
1. pycharm3.6
2. MySQL 8.0.12
まず、本の通りにコードを入力します(実際のところ123456が私のパスワードです)。
import pymysql
conn = pymysql.connect(host='127.0.0.1', unix_socket='/tmp/mysql.sock',user='root',
passwd='123456', db='mysql')
cur = conn.cursor()
cur.execute("USE scraping")
cur.execute("SELECT * FROM pages WHERE id=1")
print(cur.fetchone())
cur.close()
conn.close()
結果を実行します。
Traceback (most recent call last):
File "D:/wangyi/MySQL.py", line 3, in <module>
passwd='123456', db='mysql')
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python36-32\lib\site-packages\pymysql__\init__.py", line 94, in Connect
return Connection(*args, **kwargs)
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python36-32\lib\site-packages\pymysql\connections.py", line 327, in __init__
self.connect()
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python36-32\lib\site-packages\pymysql\connections.py", line 568, in connect
sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
AttributeError: module 'socket' has no attribute 'AF_UNIX'
Process finished with exit code 1
ドキュメントを確認した結果、エラーコードは
unix_socket='/tmp/mysql.sock'です。
このunix_socketというコードはソケット接続の場合のみ使用され、ここではIP接続を使用しているので unix_socket='/tmp/mysql.sock'を指定します。 になります。
ポート=3306 それは mysqlのデフォルトポート番号 3306 .
コードを以下のように変更しました。
import pymysql
conn = pymysql.connect(host='127.0.0.1', port=3306,user='root',
passwd='123456', db='mysql')
cur = conn.cursor()
cur.execute("USE scraping")
cur.execute("SELECT * FROM pages WHERE id=1")
print(cur.fetchone())
cur.close()
conn.close()
結果を実行します。
(1, 'Test page title', 'This is some te\nst page content. It can be up to 10,000 characters long.', datetime.datetime(2018, 9, 13, 15, 55, 7))
Process finished with exit code 0
問題解決しました。
また host=127.0.0.1について
Windowsなどでの127.0.0.1の正しい解釈は、ローカルアドレス(ローカルサーバー)、127.0.0.1はNICを介して伝送され、NICに依存し、ネットワークファイアウォールとNIC関連の制限に従う。127.0.0.1はリターンアドレスで、ローカルマシンを指し、一般にテスト目的で使用されます。リターンアドレスは、ローカルリターンアドレス(ループバックアドレス)で、ホストIPスタック内のIPアドレスを指し、主にネットワークソフトウェアのテストやローカルマシン間のプロセス間通信に使用される。どのようなプログラムであっても、一度リターン・アドレスを使ってデータを送信すると、ネットワーク通信を行わずにすぐにプロトコル・ソフトウェアが戻ってくる。
関連
-
[解決済み】#1273 - 不明な照合順序:'utf8mb4_unicode_520_ci'
-
[解決済み】MySQLのforeachループ
-
[解決済み] MySQL エラー: キーの長さがないキー指定
-
[解決済み] MySQLを使用したパーセンタイル値の計算
-
[解決済み] 日付の挿入時にエラーが発生しました - 日付の値が正しくありません。
-
[解決済み] InnoDB: Unable to lock ./ibdata1 mysql エラーを解決する方法は?
-
[解決済み] どのようにクエリは、各行のMySQLの2つのセルを乗算することができますか?
-
[解決済み] シーケライズの作成・更新
-
java.sql.SQLException: ResultSet が閉じた後の操作は許可されません。
-
エラー: 切り捨てられた不正なDOUBLE値
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】1052:フィールドリストの列「id」が曖昧である
-
[解決済み】MySQLエラー1264:カラムの範囲外の値
-
[解決済み] テーブル 'performance_schema.session_variables' は存在しません。
-
[解決済み] WindowsでMySQLの画面コンソールをクリアする方法は?
-
[解決済み] cygwinからmysqlに接続する
-
[解決済み] Q: MysqlワークベンチのデフォルトのExportパラメータとして、-set-gtid-purged=OFFを設定するには?
-
[解決済み] MySQLで1つを除くすべての列を選択しますか?
-
mysql Access denied; you need (at least one of) SUPER privilege(s) for this operation
-
Mysqldumpの解決策。Errno 32 On Write とあいまいなリダイレクトエラーが発生しました。
-
不正な文字列値: '\xE5 ³³³... ' for column 'xxx' at row 1