Як підключитися до бази даних MySQL за допомогою програми python?
pymysql
тому що це чисто безкоштовний Python відповідно до цього порівняння .
Як підключитися до бази даних MySQL за допомогою програми python?
pymysql
тому що це чисто безкоштовний Python відповідно до цього порівняння .
Відповіді:
1 - Установка
Ви повинні встановити драйвер MySQL, перш ніж робити що-небудь. На відміну від PHP, з Python за замовчуванням встановлюється лише драйвер SQLite. Найбільш використовуваний пакет для цього - MySQLdb, але його важко встановити за допомогою easy_install. Зверніть увагу, що MySQLdb підтримує лише Python 2.
Для користувача Windows ви можете отримати exe MySQLdb .
Для Linux це випадковий пакет (python-mysqldb). (Ви можете використовувати sudo apt-get install python-mysqldb
(для дистрибутива на основі debian), yum install MySQL-python
(для rpm) або dnf install python-mysql
(для сучасного дистрибутива fedora) у командному рядку для завантаження.)
Для Mac можна встановити MySQLdb за допомогою Macport .
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 - Більш розширене використання
Як тільки ви дізнаєтесь, як це працює, можливо, ви захочете використовувати ORM, щоб уникнути запису SQL вручну та маніпулювати своїми таблицями, як вони були об’єктами Python. Найвідоміша ORM в спільноті Python - це 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
Ось один із способів зробити це за допомогою MySQLdb , який підтримує лише Python 2:
#!/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. Це називається "Connector / Python".
Якщо вам не потрібен MySQLdb, але ви б прийняли будь-яку бібліотеку, я б дуже рекомендую MySQL Connector / Python від MySQL: http://dev.mysql.com/downloads/connector/python/ .
Це один пакет (близько 110 к), чистий 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
щоб знайти назву пакета. відповідь тут: stackoverflow.com/a/22829966/2048266
Перестаньте використовувати MySQLDb, якщо ви хочете уникати встановлення заголовків mysql просто для доступу до mysql з python.
Використовуйте pymysql . Він робить все те, що робить MySQLDb, але він був реалізований виключно в Python без NO зовнішніх залежностей . Це робить процес установки на всіх операційних системах послідовним та простим. pymysql
- це падіння заміни MySQLDb та IMHO. Немає підстав ніколи використовувати MySQLDb ні для чого ... - PTSD from installing MySQLDb on Mac OSX and *Nix systems
, але це тільки я.
Установка
pip install pymysql
Ось це ... ви готові грати.
Приклад використання з pymysql Github repo
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 . Деякі з перелічених причин на цьому посиланні, які говорять, чому oursql краще:
- 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.
Дуже схожий на 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 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
mysql-connector
лише. stackoverflow.com/questions/59405740 / ...
mydb.commit()
після вставки значення в таблицю
SQLAlchemy - це інструментарій Python SQL та Object Relational Mapper, який надає розробникам додатків повну потужність та гнучкість 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 запити через з'єднання. Період.
Мій кращий спосіб, який також є пітонічним, - використовувати замість цього могутню SQLAlchemy . Ось підручник, пов’язаний із запитом , і ось підручник щодо можливостей ORM SQLALchemy.
для Python3.6 я знайшов двох драйверів: pymysql та mysqlclient. Я перевірив продуктивність між ними і отримав результат: mysqlclient швидше.
нижче мій тестовий процес (потрібно встановити профіль python lib, щоб проаналізувати проміжок часу:
необроблений 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,4s)
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
Незважаючи на те, що хтось із вас може відзначити це дублікатом і засмутитися тим, що я копіюю чужу відповідь, я дійсно хотів би виділити аспект відповіді пана Напіка. Оскільки я пропустив це, я спричинив простої загальнонаціонального веб-сайту (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()
Тут важливим є пункт Спробуйте і нарешті . Це дозволяє з’єднати ЗАВЖДИ закрити, незалежно від того, що відбувається в частині курсору / sqlstatement коду. Багато активних з'єднань спричиняють шип DBLoadNoCPU і можуть зірвати сервер db.
Я сподіваюся, що це попередження допомагає зберегти сервери та, зрештою, робочі місця! : D
Найкращий спосіб підключитися до MySQL з python - це використовувати MySQL Connector / Python, оскільки це офіційний драйвер Oracle для MySQL для роботи з Python, і він працює як з Python 3, так і з Python 2.
виконайте вказані нижче кроки для підключення MySQL
встановити з'єднувач за допомогою pip
pip install mysql-connector-python
або ви можете завантажити інсталятор з https://dev.mysql.com/downloads/connector/python/
Використовуйте connect()
метод з'єднання mysql python для підключення до MySQL.pass потрібного аргументу до 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/
Важливий API MySQL Connector Python
Для операцій DML - Використовуйте cursor.execute()
та cursor.executemany()
запускайте запити. і після цього використовувати connection.commit()
для збереження змін у БД
Для отримання даних - Використовуйте cursor.execute()
для виконання запиту і cursor.fetchall()
, cursor.fetchone()
, cursor.fetchmany(SIZE)
щоб отримати дані
Просто модифікація у відповіді вище. Просто запустіть цю команду, щоб встановити mysql для python
sudo yum install MySQL-python
sudo apt-get install MySQL-python
пам’ятайте! Він враховує регістри.
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())
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
ви можете підключити свій python-код до mysql таким чином.
import MySQLdb
db = MySQLdb.connect(host="localhost",
user="appuser",
passwd="",
db="onco")
cursor = db.cursor()
Спочатку встановіть драйвер (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 ()
Для пітона 3.3
CyMySQL https://github.com/nakagami/CyMySQL
У мене на моєму Windows 7 встановлений pip, просто встановіть pip cymysql
(вам не потрібен цитон) швидкий і безболісний
Спочатку встановіть роз'єм python-mysql з https://dev.mysql.com/downloads/connector/python/
на консолі Python введіть:
pip install mysql-connector-python-rf
import mysql.connector