Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

दूरस्थ रूप से Python+SQLAlchemy का उपयोग करके MySQL डेटाबेस को कैसे कनेक्ट करें?

इस मुद्दे का क्लासिक उत्तर 127.0.0.1 . का उपयोग करना है या होस्ट का आईपी या होस्ट नाम "विशेष नाम" के बजाय localhost . दस्तावेज़ीकरण से :

और बाद में:

हालाँकि, यह सरल तरकीब आपके मामले में काम नहीं करती है, इसलिए आपको किसी तरह बल टीसीपी सॉकेट का उपयोग। जैसा कि आपने स्वयं समझाया, mysql . का आह्वान करते समय कमांड लाइन पर, आप --protocol tcp . का उपयोग करते हैं विकल्प।

जैसा बताया गया है यहां , SQLAlchemy से, आप अपने ड्राइवर को प्रासंगिक विकल्प (यदि कोई हों) या तो URL विकल्प या के रूप में पास कर सकते हैं connect_args . का उपयोग करके कीवर्ड तर्क।

उदाहरण के लिए PyMySQL . का उपयोग करना , एक परीक्षण प्रणाली पर मैंने उस उद्देश्य के लिए सेटअप किया है (MariaDB 10.0.12, SQLAlchemy 0.9.8 और PyMySQL 0.6.2) मुझे निम्नलिखित परिणाम मिले:

>>> engine = create_engine(
      "mysql+pymysql://sylvain:[email protected]/db?host=localhost?port=3306")
#                                                 ^^^^^^^^^^^^^^^^^^^^^^^^^^
#                               Force TCP socket. Notice the two uses of `?`
#                               Normally URL options should use `?` and `&`  
#                               after that. But that doesn't work here (bug?)
>>> conn = engine.connect()
>>> conn.execute("SELECT host FROM INFORMATION_SCHEMA.PROCESSLIST WHERE ID = CONNECTION_ID()").fetchall()
[('localhost:54164',)]

# Same result by using 127.0.0.1 instead of localhost: 
>>> engine = create_engine(
      "mysql+pymysql://sylvain:[email protected]/db?host=localhost?port=3306")
>>> conn = engine.connect()
>>> conn.execute("SELECT host FROM INFORMATION_SCHEMA.PROCESSLIST WHERE ID = CONNECTION_ID()").fetchall()
[('localhost:54164',)]

# Alternatively, using connect_args:
>>> engine = create_engine("mysql+pymysql://sylvain:[email protected]/db",
                       connect_args= dict(host='localhost', port=3306))
>>> conn = engine.connect()
>>> conn.execute("SELECT host FROM INFORMATION_SCHEMA.PROCESSLIST WHERE ID = CONNECTION_ID()").fetchall()
[('localhost:54353',)]

जैसा कि आपने देखा, दोनों एक टीसीपी कनेक्शन का उपयोग करेंगे (मुझे पता है कि होस्टनाम के बाद पोर्ट नंबर की वजह से)। दूसरी ओर:

>>> engine = create_engine(
      "mysql+pymysql://sylvain:[email protected]/db?unix_socket=/path/to/mysql.sock")
#                                                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
#                               Specify the path to mysql.sock in
#                               the `unix_socket` option will force
#                               usage of a UNIX socket

>>> conn = engine.connect()
>>> conn.execute("SELECT host FROM INFORMATION_SCHEMA.PROCESSLIST WHERE ID = CONNECTION_ID()").fetchall()
[('localhost',)]

# Same result by using 127.0.0.1 instead of localhost: 
>>> engine = create_engine(
      "mysql+pymysql://sylvain:[email protected]/db?unix_socket=/path/to/mysql.sock")
>>> conn = engine.connect()
>>> conn.execute("SELECT host FROM INFORMATION_SCHEMA.PROCESSLIST WHERE ID = CONNECTION_ID()").fetchall()
[('localhost',)]

# Alternatively, using connect_args:
>>> engine = create_engine("mysql+pymysql://sylvain:[email protected]/db",
                       connect_args= dict(unix_socket="/path/to/mysql.sock"))
>>> conn = engine.connect()
>>> conn.execute("SELECT host FROM INFORMATION_SCHEMA.PROCESSLIST WHERE ID = CONNECTION_ID()").fetchall()
[('localhost',)]

होस्टनाम . के बाद कोई पोर्ट नहीं :यह एक यूनिक्स सॉकेट है।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle MySQL, Percona Server और MariaDB की तुलना करना

  2. mysql धीमी क्वेरी

  3. ड्रॉप-डाउन मेनू से चयन करें और पृष्ठ पुनः लोड करें

  4. विदेशी कुंजी के रूप में समग्र प्राथमिक कुंजी का प्रयोग करें

  5. समय ओवरलैप के लिए एक टेबल की जाँच?