Pythonプログラムを使用してMySQLデータベースに接続するにはどうすればよいですか?
pymysql
ているのは、この比較によると純粋な無料のPython だからです。
Pythonプログラムを使用してMySQLデータベースに接続するにはどうすればよいですか?
pymysql
ているのは、この比較によると純粋な無料のPython だからです。
回答:
1-設定
何かを行う前に、MySQLドライバーをインストールする必要があります。PHPとは異なり、PythonではデフォルトでSQLiteドライバーのみがインストールされます。そのために最も使用されるパッケージはMySQLdbですが、easy_installを使用してインストールするのは困難です。MySQLdbはPython 2のみをサポートしています。
Windowsユーザーの場合、MySQLdbのexeを取得できます。
Linuxの場合、これはカジュアルパッケージ(python-mysqldb)です。(ダウンロードするには、コマンドラインsudo apt-get install python-mysqldb
でyum install MySQL-python
(debianベースのディストリビューションの場合)、(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
この例はそのまま使用できます。peewee(pip install peewee
)以外は必要ありません。
pip install MySQL-python
これを行う1つの方法は、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()
No module named MySQLdb
。共有ホスティングでmysqlをpythonで使用するにはどうすればよいですか。代替案はありますか?
Oracle(MySQL)は、純粋なPythonコネクタをサポートするようになりました。つまり、インストールするバイナリはありません。これは単なるPythonライブラリです。「コネクタ/ Python」と呼ばれています。
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()
rpm -i mysql-connector-python-1.1.5-1.el6.noarch.rpm
error: Failed dependencies:
rpmlib(FileDigests) <= 4.6.0-1 is needed by mysql-connector-python-1.1.5-1.el6.noarch
rpmlib(PayloadIsXz) <= 5.2-1 is needed by mysql-connector-python-1.1.5-1.el6.noarch
pip install mysql-connector-python
も動作します。PyPiでサポートされなくなったと表示されている場所がわかりませんか?システムのgcc / Cコンパイラにアクセスできないため、をインストールできない場合に最適mysqldb
です。
pip search mysql-connector
のパッケージはパッケージ名を見つけるためのmysql-connectorにすぎません。ここからの回答:stackoverflow.com/a/22829966/2048266
pythonからmysqlにアクセスするためだけにmysqlヘッダーをインストールすることを避けたい場合は、MySQLDbの使用を停止します。
pymysqlを使用します。これはMySQLDbが行うことのすべてを実行しますが、外部依存関係のない純粋なPythonで実装されました。これにより、すべてのオペレーティングシステムでのインストールプロセスが一貫して簡単になります。 pymysql
MySQLDbの代わりのドロップであり、私見MySQLMydbを何かに使用する理由はありません...これまで!- 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, ('webmaster@python.org', '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, ('webmaster@python.org',))
result = cursor.fetchone()
print(result)
finally:
connection.close()
また-既存のコードのMySQLdbを迅速かつ透過的に置き換えます
MySQLdbを使用する既存のコードがある場合は、次の単純なプロセスを使用して簡単にpymysqlに置き換えることができます。
# import MySQLdb << Remove this line and replace with:
import pymysql
pymysql.install_as_MySQLdb()
以降のMySQLdbへの参照では、透過的にpymysqlが使用されます。
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 ()
localhost
)にとってタイムゾーンサポートは何を重要にしますか?
dbドライバーとして、oursqlもあります。そのリンクに記載されている理由のいくつかは、私たちのSQLの方が優れている理由を示しています。
- oursqlには実際のパラメーター化があり、SQLとデータを完全に別々にMySQLに送信します。
- oursqlを使用すると、テキストやバイナリデータをデータベースにストリーミングしたり、データベースからストリーミングしたりできます。すべてをクライアントにバッファリングする必要はありません。
- oursqlは、行の遅延挿入と遅延フェッチの両方を行うことができます。
- oursqlは、デフォルトでユニコードをサポートしています。
- oursqlは、2.6以降(PEP 218を参照)で非推奨の警告なしに、および2.7(PEP 328を参照)で完全に失敗せずに、Python 2.4から2.7をサポートします。
- oursqlはpython 3.xでネイティブに実行されます。
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は、他の回答ですでに述べたように、適切な選択です。
端末で次のコマンドを実行して、mysqlコネクタをインストールします。
pip install mysql-connector-python
そして、これをPythonエディターで実行してMySQLに接続します。
import mysql.connector
mydb = mysql.connector.connect(
host="localhost",
user="yusername",
passwd="password",
database="database_name"
)
MySQLコマンドを実行するためのサンプル(Pythonエディターで):
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
mysql-connector
います。 stackoverflow.com/questions/59405740/...
mydb.commit()
テーブルに値を挿入した後に実行するのを忘れた
SQLAlchemyは、アプリケーション開発者にSQLの全機能と柔軟性を提供するPython SQLツールキットおよびオブジェクトリレーショナルマッパーです。SQLAlchemyは、効率的で高性能なデータベースアクセス用に設計された、よく知られているエンタープライズレベルの永続性パターンの完全なスイートを提供します。
pip install sqlalchemy
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()
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):
__tablename__ = '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()
上記のすべての回答にもかかわらず、特定のデータベースに直接接続したくない場合、たとえば、データベースをまだ作成したい(!)場合は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()
MySQLdbは簡単な方法です。接続を介してSQLクエリを実行できます。限目。
私の好みの方法は、Pythonicでもあり、代わりに強力なSQLAlchemyを使用することです。これはクエリ関連のチュートリアルであり、SQLALchemyのORM機能に関するチュートリアルです。
Python3.6の場合、pymysqlとmysqlclientの2つのドライバーが見つかりました。私はそれらの間のパフォーマンスをテストし、結果を得ました:mysqlclientはより高速です。
以下は私のテストプロセスです(経過時間を分析するためにpython lib profilehooksをインストールする必要があります:
生のSQL: select * from FOO;
mysqlターミナルですぐに実行します。
46410 rows in set (0.10 sec)
pymysql(2.4s):
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()
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はpymysqlよりもはるかに速いようです
一部の人がこれを重複としてマークし、他の誰かの回答をコピーしていることに腹を立てるかもしれませんが、私は本当に Napik氏の回答の側面を強調したいと思います。これを見逃したため、全国的なWebサイトのダウンタイム(9分)を引き起こしました。誰かがこの情報を共有しただけなら、私はそれを防ぐことができたでしょう!
これが彼のコードです:
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()
ここで重要なのは、Try and Final句です。これは、に接続可能ALWAYSは関係なく、コードのカーソル/ SQLStatementの部分に何が起こるかの、閉じられます。アクティブな接続が多数あると、DBLoadNoCPUが急上昇し、DBサーバーがクラッシュする可能性があります。
この警告がサーバーと最終的にはジョブの節約に役立つことを願っています!:D
PythonからMySQLに接続する最良の方法は、MySQL Connector / Pythonを使用することです。これは、Pythonを使用するためのMySQLの公式Oracleドライバであり、Python 3とPython 2の両方で動作するためです。
MySQLに接続するには、以下の手順に従ってください
ピップを使用してコネクタをインストールする
pip install mysql-connector-python
または、https://dev.mysql.com/downloads/connector/python/からインストーラーをダウンロードできます。
connect()
mysqlコネクタpythonのメソッドを使用してMySQLに接続し、必要な引数をconnect()
メソッドに渡します。つまり、ホスト、ユーザー名、パスワード、データベース名。
メソッドcursor
によって返された接続オブジェクトからオブジェクトを作成connect()
し、SQLクエリを実行します。
作業が完了したら、接続を閉じます。
例:
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 ("You're 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コネクタPythonの重要なAPI
DML操作の場合- cursor.execute()
とcursor.executemany()
を使用してクエリを実行します。この使用後connection.commit()
、変更をDBに永続化します
使用する-データをフェッチするために、cursor.execute()
クエリを実行するとcursor.fetchall()
、cursor.fetchone()
、cursor.fetchmany(SIZE)
データをフェッチします
上記の答えを変更しただけです。このコマンドを実行してmysqlをpythonにインストールするだけです
sudo yum install MySQL-python
sudo apt-get install MySQL-python
覚えて!大文字と小文字が区別されます。
他の人が特定のバージョンのpythonのみをサポートするため、mysqlclientが最適です。
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())
mysql.connector
とは、_mysql
(第二の選択肢は、マニュアルに従って動作するはずですが)インポートエラーの両方を与えます。import MySQLdb
動作し、その後MySQLdb.connect...
また、見とる嵐を。これは、クエリを記述せずに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:password@localhost: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
これは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 __name__ == '__main__':
app.run()
最初にドライバーをインストールする
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
最初にドライバーをインストールします(Ubuntu)
sudo apt-get install python-pip
sudo pip install -U pip
sudo apt-get install python-dev libmysqlclient-dev
sudo apt-get install 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 ()
Python 3.3の場合
CyMySQL https://github.com/nakagami/CyMySQL
Windows 7にpipがインストールされていますが、pip install cymysql
(あなたはcythonを必要としません)迅速で無痛
まず、https: //dev.mysql.com/downloads/connector/python/からpython-mysqlコネクタをインストールします
Pythonコンソールで次のように入力します。
pip install mysql-connector-python-rf
import mysql.connector