web-dev-qa-db-ja.com

PythonでMySQLデータベースに接続するにはどうすればいいですか?

Pythonプログラムを使用してMySQLデータベースに接続するにはどうすればいいですか?

1075
Marc Lincoln

3つのステップでPython 2でMYSQLに接続する

1 - 設定

何かをする前にMySQLドライバをインストールしなければなりません。 PHPとは異なり、PythonではデフォルトでSQLiteドライバのみがインストールされます。最もよく使われるパッケージは MySQLdb ですが、easy_installを使ってインストールするのは難しいです。 MySQLdbはPython 2のみをサポートしています。

Windowsユーザーの場合は、 MySQLdbのexe を取得できます。

Linuxの場合、これはカジュアルパッケージ(python-mysqldb)です。 (ダウンロードするコマンドラインでSudo apt-get install python-mysqldb(Debianベースのディストリビューションの場合)、yum install MySQL-python(rpmベースの場合)、またはdnf install python-mysql(最新のFedoraディストリビューションの場合)を使用できます。)

Macの場合、 Macportを使用してMySQLdbをインストール _を実行できます。

2 - 使用法

インストール後、再起動してください。これは必須ではありませんが、何か問題が発生した場合でも、この投稿に含まれる他の3つまたは4つの質問に答えることはできません。再起動してください。

それは他のパッケージを使うのと同じです。

#!/usr/bin/python
import MySQLdb

db = MySQLdb.connect(Host="localhost",    # your Host, usually localhost
                     user="john",         # your username
                     passwd="megajonhy",  # your password
                     db="jonhydb")        # name of the data base

# you must create a Cursor object. It will let
#  you execute all the queries you need
cur = db.cursor()

# Use all the SQL you like
cur.execute("SELECT * FROM YOUR_TABLE_NAME")

# print all the first cell of all the rows
for row in cur.fetchall():
    print row[0]

db.close()

もちろん、たくさんの可能性と選択肢があります。これは非常に基本的な例です。あなたはドキュメンテーションを見なければならないでしょう。 良い出発点

3 - もっと進んだ使い方

それがどのように機能するかがわかったら、手動でSQLを書くことを避け、Pythonオブジェクトであるためテーブルを操作するために ORM を使用することができます。 Pythonコミュニティで最も有名なORMは SQLAlchemy です。

私はあなたにそれを使うことを強く勧めます:あなたの人生はずっと楽になるでしょう。

私は最近Pythonの世界で別の宝石を発見しました: peewee 。それは非常に軽量なORMで、本当に簡単で素早くセットアップしてから使用することができます。それは小さなプロジェクトやスタンドアロンのアプリケーションのための私の一日になります、SQLAlchemyやDjangoのような大きなツールを使うのはやり過ぎです。

import peewee
from peewee import *

db = MySQLDatabase('jonhydb', user='john', passwd='megajonhy')

class Book(peewee.Model):
    author = peewee.CharField()
    title = peewee.TextField()

    class Meta:
        database = db

Book.create_table()
book = Book(author="me", title='Peewee is cool')
book.save()
for book in Book.filter(author="me"):
    print book.title

この例はそのまま使用できます。のぞき見(pip install peewee)を持つ以外に何も必要ありません。

1196
e-satis

これを行うには、Python 2のみをサポートする MySQLdb を使用する方法があります。

#!/usr/bin/python
import MySQLdb

# Connect
db = MySQLdb.connect(Host="localhost",
                     user="appuser",
                     passwd="",
                     db="onco")

cursor = db.cursor()

# Execute SQL select statement
cursor.execute("SELECT * FROM location")

# Commit your changes if writing
# In this case, we are only reading data
# db.commit()

# Get the number of rows in the resultset
numrows = cursor.rowcount

# Get and display one row at a time
for x in range(0, numrows):
    row = cursor.fetchone()
    print row[0], "-->", row[1]

# Close the connection
db.close()

ここでの参照

174
George Stocker

Oracle(MySQL)は現在、純粋なPythonコネクタをサポートしています。これはバイナリをインストールする必要がないことを意味します。それは単なるPythonライブラリです。それは "Connector/Python"と呼ばれています。

http://dev.mysql.com/downloads/connector/python/

114
Ken Brown

MySQLdbを必要としないが、どんなライブラリでも受け入れるなら、MySQLからのMySQL Connector/Pythonを強くお勧めします: http://dev.mysql.com/downloads/connector/python/ .

これは1つのパッケージ(およそ110k)、純粋なPythonなので、システムに依存せず、インストールも簡単です。ダウンロードしてダブルクリックし、使用許諾契約を確認してから進むだけです。 Xcode、MacPorts、コンパイル、再起動は必要ありません。

それならあなたは次のように接続します。

import mysql.connector    
cnx = mysql.connector.connect(user='scott', password='tiger',
                              Host='127.0.0.1',
                              database='employees')

try:
   cursor = cnx.cursor()
   cursor.execute("""
      select 3 from your_table
   """)
   result = cursor.fetchall()
   print result
finally:
    cnx.close()
105
Mr. Napik

Pythonからmysqlにアクセスするためだけにmysqlヘッダーをインストールしたくない場合は、MySQLDbの使用を中止してください。

pymysql を使用してください。それはMySQLDbがすることのすべてをするが、それは純粋にPythonでNO External Dependenciesで実装された。これにより、すべてのオペレーティングシステムへのインストールプロセスが一貫して簡単になります。 pymysqlはMySQLDbとIMHOの代わりになるものです。MySQLDbを何にでも使用する理由はありません。 - PTSD from installing MySQLDb on Mac OSX and *Nix systems、でもそれは私だけです。

インストール

pip install pymysql

それで…あなたは遊ぶ準備ができています。

pymysql Githubリポジトリからの使用例

import pymysql.cursors
import pymysql

# Connect to the database
connection = pymysql.connect(Host='localhost',
                             user='user',
                             password='passwd',
                             db='db',
                             charset='utf8mb4',
                             cursorclass=pymysql.cursors.DictCursor)

try:
    with connection.cursor() as cursor:
        # Create a new record
        sql = "INSERT INTO `users` (`email`, `password`) VALUES (%s, %s)"
        cursor.execute(sql, ('[email protected]', 'very-secret'))

    # connection is not autocommit by default. So you must commit to save
    # your changes.
    connection.commit()

    with connection.cursor() as cursor:
        # Read a single record
        sql = "SELECT `id`, `password` FROM `users` WHERE `email`=%s"
        cursor.execute(sql, ('[email protected]',))
        result = cursor.fetchone()
        print(result)
finally:
    connection.close()

ALSO - 既存のコードのMySQLdbを素早く透過的に置き換える

MySQLdbを使用する既存のコードがある場合は、この簡単なプロセスを使用してpymysqlに簡単に置き換えることができます。

# import MySQLdb << Remove this line and replace with:
import pymysql
pymysql.install_as_MySQLdb()

以降のMySQLdbへの参照はすべてpymysqlを透過的に使用します。

103
OkezieE

MySQLdb を使ってみてください。 MySQLdbはPython 2のみをサポートします。

ここにページする方法があります: http://www.kitebird.com/articles/pydbapi.html


ページから:

# server_version.py - retrieve and display database server version

import MySQLdb

conn = MySQLdb.connect (Host = "localhost",
                        user = "testuser",
                        passwd = "testpass",
                        db = "test")
cursor = conn.cursor ()
cursor.execute ("SELECT VERSION()")
row = cursor.fetchone ()
print "server version:", row[0]
cursor.close ()
conn.close ()
21
Hortitude

Dbドライバーとして、 oursql もあります。そのリンクにリストされている理由のいくつかは、私たちのSQLがより良い理由を言います:

  • oursqlには実際のパラメータ化があり、SQLとデータを完全に別々にMySQLに送信します。
  • oursqlを使用すると、テキストまたはバイナリデータをデータベースにストリーミングしたり、データベースからストリーミングアウトしたりすることができます。クライアントにすべてのデータをバッファリングする必要はありません。
  • oursqlは、行を遅延挿入することも、行を遅延取り出しすることもできます。
  • oursqlは、デフォルトでUnicodeサポートをオンにしています。
  • oursqlはPython 2.4から2.7までをサポートしています。2.6以降では非推奨警告はなく(PEP 218参照)、2.7で完全に失敗することもありません(PEP 328参照)。
  • oursqlはpython 3.x上でネイティブに動作します。

では、どうやってoursqlを使ってmysqlに接続するのでしょうか。

Mysqldbと非常によく似ています。

import oursql

db_connection = oursql.connect(Host='127.0.0.1',user='foo',passwd='foobar',db='db_name')
cur=db_connection.cursor()
cur.execute("SELECT * FROM `tbl_name`")
for row in cur.fetchall():
    print row[0]

ドキュメントの チュートリアル はかなり適切です。

そしてもちろん他の答えで述べたように、ORM SQLAlchemyは良い選択です。

18
bool.dev

上記のすべての回答にもかかわらず、特定のデータベースに事前に接続したくない場合、たとえばまだデータベースを作成したい場合(!)、以下に示すようにconnection.select_db(database)を使用できます。

import pymysql.cursors
connection = pymysql.connect(Host='localhost',
                         user='mahdi',
                         password='mahdi',
                         charset='utf8mb4',
                         cursorclass=pymysql.cursors.DictCursor)
cursor = connection.cursor()
cursor.execute("CREATE DATABASE IF NOT EXISTS "+database)
connection.select_db(database)
sql_create = "CREATE TABLE IF NOT EXISTS "+tablename+(timestamp DATETIME NOT NULL PRIMARY KEY)"
cursor.execute(sql_create)
connection.commit()
cursor.close()
11
Mahdi

錬金術


SQLAlchemyは、PythonのSQLツールキットおよびオブジェクトリレーショナルマッパーであり、アプリケーション開発者にSQLの完全な機能と柔軟性を提供します。 SQLAlchemyは、シンプルでPythonicドメイン言語に適応した、効率的で高性能なデータベースアクセス用に設計された、よく知られているエンタープライズレベルの永続パターンの完全なスイートを提供します。

Installation

pip install sqlalchemy

RAWクエリ

from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker, scoped_session

engine = create_engine("mysql://<user_name>:<password>@<Host_name>/<db_name>")
session_obj = sessionmaker(bind=engine)
session = scoped_session(session_obj)

# insert into database
session.execute("insert into person values(2, 'random_name')")
session.flush()
session.commit()

ORMウェイ

from sqlalchemy import Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker, scoped_session

Base = declarative_base()
engine = create_engine("mysql://<user_name>:<password>@<Host_name>/<db_name>")
session_obj = sessionmaker(bind=engine)
session = scoped_session(session_obj)

# Bind the engine to the metadata of the Base class so that the
# declaratives can be accessed through a DBSession instance
Base.metadata.bind = engine

class Person(Base):
    __table= 'person'
    # Here we define columns for the table person
    # Notice that each column is also a normal Python instance attribute.
    id = Column(Integer, primary_key=True)
    name = Column(String(250), nullable=False)

# insert into database
person_obj = Person(id=12, name="name")
session.add(person_obj)
session.flush()
session.commit()
9
anand tripathi

MySQLdb は簡単な方法です。接続を介してSQLクエリを実行します。期間。

これもPythonicである私の推奨する方法は、代わりに強力な SQLAlchemy を使用することです。これは クエリ関連の チュートリアルで、SQLALchemyの ORM機能 に関するチュートリアルです。

8
muhuk

上記の答えを修正しただけです。このコマンドを実行して、Python用のmysqlをインストールするだけです。

Sudo yum install MySQL-python
Sudo apt-get install MySQL-python

覚えている!大文字と小文字が区別されます。

5
HMS

python3.6の場合、pymysqlとmysqlclientの2つのドライバが見つかりました。私はそれらの間のパフォーマンスをテストし、そして結果を得ました:mysqlclientはより速いです。

以下は私のテストプロセスです(時間の経過を分析するにはpython lib profilehooksをインストールする必要があります:

生のSQL:select * from FOO;

mysql端末ですぐに実行します。46410 rows in set (0.10 sec)

pymysql(2.4秒):

from profilehooks import profile
import pymysql.cursors
import pymysql
connection = pymysql.connect(Host='localhost', user='root', db='foo')
c = connection.cursor()

@profile(immediate=True)
def read_by_pymysql():
    c.execute("select * from FOO;")
    res = c.fetchall()

read_by_pymysql()

これがpymysqlプロファイルです: enter image description here


mysqlclient(0.4秒)

from profilehooks import profile
import MySQLdb

connection = MySQLdb.connect(Host='localhost', user='root', db='foo')
c = connection.cursor()

@profile(immediate=True)
def read_by_mysqlclient():
    c.execute("select * from FOO;")
    res = c.fetchall()

read_by_mysqlclient()

これがmysqlclientプロファイルです。 enter image description here

だから、それはmysqlclientがpymysqlよりはるかに速いようです

5
kai

PythonからMySQLに接続するための最良の方法は、MySQL Connector/Pythonを使用することです。Pythonを操作するためのMySQL用の公式のOracleドライバであり、Python 3とPython 2の両方で動作するためです。

mySQLに接続するには、以下の手順に従ってください。

  1. ピップを使用してコネクタを取り付ける

    pip install mysql-connector-python

または、インストーラを https://dev.mysql.com/downloads/connector/python/ からダウンロードすることもできます。

  1. MySQLに接続するには、mysqlコネクターpythonのconnect()メソッドを使用します。connect()メソッドに必要な引数を渡します。つまり、ホスト、ユーザー名、パスワード、データベース名です。

  2. connect()methodによって返された接続オブジェクトからcursorオブジェクトを作成してSQLクエリを実行します。

  3. 作業が完了したら接続を閉じます。

import mysql.connector
 from mysql.connector import Error
 try:
     conn = mysql.connector.connect(Host='hostname',
                         database='db',
                         user='root',
                         password='passcode')
     if conn.is_connected():
       cursor = conn.cursor()
       cursor.execute("select database();")
       record = cursor.fetchall()
       print ("Your connected to - ", record)
 except Error as e :
    print ("Print your error msg", e)
 finally:
    #closing database connection.
    if(conn.is_connected()):
       cursor.close()
       conn.close()

リファレンス - https://pynative.com/python-mysql- database-connection /

MySQL Connector Pythonの重要なAPI

  • DML操作の場合 - クエリを実行するにはcursor.execute()cursor.executemany()を使用します。そしてその後、connection.commit()を使ってDBへの変更を永続化します。

  • データを取得するには - クエリを実行するにはcursor.execute()を、データを取得するにはcursor.fetchall()cursor.fetchone()cursor.fetchmany(SIZE)を使用します。

4
Vishal Hule

Storm も見てください。それはあなたが簡単にクエリを書かずにSQLエントリを編集して作成することを可能にする簡単なSQLマッピングツールです。

これは簡単な例です:

from storm.locals import *

# User will be the mapped object; you have to create the table before mapping it
class User(object):
        __storm_table__ = "user" # table name
        ID = Int(primary=True) #field ID
        name= Unicode() # field name

database = create_database("mysql://root:[email protected]:3306/databaseName")
store = Store(database)

user = User()
user.name = u"Mark"

print str(user.ID) # None

store.add(user)  
store.flush() # ID is AUTO_INCREMENT

print str(user.ID) # 1 (ID)

store.commit() # commit all changes to the database

オブジェクトを検索して使用するには:

michael = store.find(User, User.name == u"Michael").one()
print str(user.ID) # 10

主キーで検索:

print store.get(User, 1).name #Mark

詳しくは チュートリアル をご覧ください。

3
michip96

mysqlclientは他の人がpythonの特定のバージョンへのサポートを提供するだけなので最高です。

 pip install mysqlclient

コード例

    import mysql.connector
    import _mysql
    db=_mysql.connect("127.0.0.1","root","umer","sys")
    #db=_mysql.connect(Host,user,password,db)
    # Example of how to insert new values:
    db.query("""INSERT INTO table1 VALUES ('01', 'myname')""")
    db.store_result()
    db.query("SELECT * FROM new1.table1 ;") 
    #new1 is scheme table1 is table mysql 
    res= db.store_result()
    for i in range(res.num_rows()):
        print(result.fetch_row())

https://github.com/PyMySQL/mysqlclient-python を参照してください。

3
Umer

ターミナルで次のコマンドを実行して、mysqlコネクタをインストールします。

pip install mysql-connector-python

pythonエディターでこれを実行して、MySQLに接続します。

import mysql.connector

mydb = mysql.connector.connect(
      Host="localhost",
      user="yourusername",
      passwd="yourpassword",
      database="mydatabase"
)

MySQLコマンドを実行するサンプル(python edior内):

mycursor = mydb.cursor()
mycursor.execute("CREATE TABLE customers (name VARCHAR(255), address VARCHAR(255))")    
mycursor.execute("SHOW TABLES")

mycursor.execute("INSERT INTO customers (name, address) VALUES ('John', 'Highway 21')")    
mydb.commit() # Use this command after insert or update

その他のコマンド: https://www.w3schools.com/python/python_mysql_getstarted.asp

3
Sherzod

最初にドライバをインストールする

pip install MySQL-python   

基本的なコードは次のようになります。

#!/usr/bin/python
import MySQLdb

try:
    db = MySQLdb.connect(Host="localhost",      # db server, can be a remote one 
                     db="mydb"                  # database
                     user="mydb",               # username
                     passwd="mydb123",          # password for this username
                     )        

    # Create a Cursor object
    cur = db.cursor()

    # Create a query string. It can contain variables
    query_string = "SELECT * FROM MY_TABLE"

    # Execute the query
    cur.execute(query_string)

    # Get all the rows present the database
    for each_row in cur.fetchall():
        print each_row

    # Close the connection
    db.close()
except Exception, e:
    print 'Error ', e 
1

これはMysql DB接続です

from flask import Flask, render_template, request
from flask_mysqldb import MySQL

app = Flask(__name__)


app.config['MYSQL_Host'] = 'localhost'
app.config['MYSQL_USER'] = 'root'
app.config['MYSQL_PASSWORD'] = 'root'
app.config['MYSQL_DB'] = 'MyDB'

mysql = MySQL(app)


@app.route('/', methods=['GET', 'POST']) 
def index():
    if request.method == "POST":
        details = request.form
        cur = mysql.connection.cursor()
        cur.execute ("_Your query_")
        mysql.connection.commit()
        cur.close()
        return 'success'
    return render_template('index.html')


if __== '__main__':
    app.run()
1
A H M

この方法であなたのPythonコードをmysqlに接続することができます。

import MySQLdb
db = MySQLdb.connect(Host="localhost",
                 user="appuser",
                 passwd="",
                 db="onco")

cursor = db.cursor()
1
Haider Ali

最初にドライバをインストールします(Ubuntu)

  • Sudo apt-get install python-pip

  • Sudo pip install -Uピップ

  • Sudo apt-getインストールpython-dev libmysqlclient-dev

  • Sudo apt-get MySQL-pythonをインストールしてください

MySQLデータベース接続コード

import MySQLdb
conn = MySQLdb.connect (Host = "localhost",user = "root",passwd = "pass",db = "dbname")
cursor = conn.cursor ()
cursor.execute ("SELECT VERSION()")
row = cursor.fetchone ()
print "server version:", row[0]
cursor.close ()
conn.close ()
0
Hasib Kamal

Python 3.3の場合

CyMySQL https://github.com/nakagami/CyMySQL

私は自分のwindows 7にpipをインストールしています、ちょうどcymysqlをpipインストールします

(あなたはcythonを必要としません)迅速かつ無痛

0
Lazik