Як підключитися до бази даних MySQL в Python?


1162

Як підключитися до бази даних MySQL за допомогою програми python?


44
Більшість відповідей тут зосереджені на встановленні бібліотеки MySQLDb, я дійсно пропоную вибір для MySQL Connector / Python забезпечується MySQL / Oracle, що робить процес набагато простіше: stackoverflow.com/questions/372885 / ...
г Napik

8
Проблема використання Connector / Python Oracle полягає в тому, що у нього є непомітні помилки та інші проблеми інтеграції. Встановити його просто, але майже неможливо приступити до роботи для всіх реальних випадків використання, в яких я намагався. Тому я завжди рекомендую MySQLdb.
Джо C.

7
@ Mr.Napik я використовую, pymysqlтому що це чисто безкоштовний Python відповідно до цього порівняння .
Cees Timmerman

Відповіді:


1245

Підключення до MYSQL з Python 2 в три етапи

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).


46
Радий, що тобі подобається peewee !! Я додав підтримку MySQL, а також деяку документацію щодо інтеграції з ним. Щасливий злом!
coleifer

14
Зауважте, що на момент написання цього запису MySQLdb не підтримує Python 3. На сторінці sourceforge написано, що "скоро буде підтримка Python 3", але вона не оновлювалася з 2012-10-08. Для Python 3 є PyMySQL та oursql .
Павло

8
Також зверніть увагу на необхідне:pip install MySQL-python
Бен Кроухерст

5
Ця відповідь була б кориснішою в прикладі підключення до зовнішнього сервера на нестандартному порту, щоб показати, як це зробити. Говорити localhost - це звичайний спосіб - це нісенітниця.
Антоній

3
Peewee змінив поведінку за замовчуванням і більше не використовує автокомісію за замовчуванням. Навіть ситуація з драйверами БД зараз змінилася. Питання потребує оновлення, але оскільки зловживання правом на деякі мої відповіді я більше не редагую їх.
e-satis

189

Ось один із способів зробити це за допомогою 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()

Довідка тут


4
чи потрібно в цьому прикладі виконувати, оскільки ви не змінюєте базу даних?
sumanth232

3
ПОПЕРЕДЖЕННЯ - цей модуль не підтримує часовий пояс підключення
kommradHomer

Це не працює на моєму спільному хостингу. Кажучи це No module named MySQLdb. Як я можу використовувати mysql з python для спільного хостингу. Будь-яка альтернатива?
Bhavesh Gangani

@BhaveshGangani вам потрібно буде зв’язатися з вашим хостом і запитати, чому бібліотеки Python вони підтримують. Якщо вони підтримують pypi, тоді ви завжди можете завантажити пакунок, коли станеться ваша розгортання.
Джордж Стокер

1
Цікаво, що навіть якщо документи говорять, що це працює лише з python 2, він, здається, працює з python 3 для мене
lucidbrot

122

Oracle (MySQL) тепер підтримує чистий роз'єм Python. Це означає, що жодних бінарних файлів не встановлювати: це просто бібліотека Python. Це називається "Connector / Python".

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


1
це швидше, ніж використовувати mysqldb?
alwbtc

8
Так. Крім того, це менше клопоту, ніж MySQLdb, і API, на мій погляд, краще. Це має бути відповіддю.
Антоній

1
використання офіційного роз'єму mysql python - найкращий спосіб виграти час
Анас,

2
@ J0hnG4lt Ви можете просто натиснути кнопку "Ні, дякую, просто почніть моє завантаження" під формою входу (що насправді здається обов'язковим, але це не так).
ComFreek

6
@ComFreek чудово. Як це краще? Чи можемо ми припинити застосовувати "робочий процес Windows". Управління пакетами існує.
J0hnG4lt

119

Якщо вам не потрібен 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()

2
Не зовсім так просто, як ви заявляєте. Коли я спробував встановити rpm, у мене з’явилося кілька проблем залежності (FileDigests та PayloadIsXz) з моєї RPM: 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
tatlar

2
Раніше я віддав перевагу цій бібліотеці, але вона більше не підтримується офіційно на PyPi. З тих пір я перейшов до MySQLdb.
Стівен Меркатанте

2
@Arms: офіційно не підтримується PyPi? У вас є джерело для цього?
Месса

7
pip install mysql-connector-pythonтакож буде працювати. Я не бачу, де це повідомлення більше не підтримується на PyPi? Чудово, якщо у вас немає доступу до компіляторів gcc / C у вашій системі, і тому ви не можете встановити mysqldb.
декларації

7
станом на 7 листопада 2016 року пакет для pip - це просто mysql-роз'єм, pip search mysql-connectorщоб знайти назву пакета. відповідь тут: stackoverflow.com/a/22829966/2048266
nommer

117

Перестаньте використовувати 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 прозоро.


3
"Завжди" трохи сильний ... Що не так з peewee або sqlalchemy? Навіть якщо вони існують як бібліотеки ORM, вони все одно настільки ж корисні
OneCricketeer

4
Ні, я не думаю, що це взагалі сильно. З огляду на можливість використовувати або MySQLDb, або PyMysql, я думаю, що вибір PyMysql не є мозком, оскільки це проста установка файлу без залежностей, в той час як MySQLDb вимагає встановлення файлів заголовків розробки mysql для вашої платформи ОС, щоб він працював. Sqlalchemy не враховує це, тому що вона все ще повинна обертатися навколо модуля, який може говорити з mysql, як PyMysql, MySQLDb, CyMySQL тощо. Peewee виглядає цікаво, проте я перевірю це
OkezieE

2
@ cricket_007 peewee і sqlalchemly не реалізують власний роз'єм db, вони надають шар над MySQLdb тощо.
rockportrocker

25

Спробуйте використовувати 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 ()

2
ПОПЕРЕДЖУЙТЕ - цей модуль не підтримує часовий пояс підключення
kommradHomer

1
@kommradHomer Чи можете ви, будь ласка, детальніше розглянути?
Підерман

1
@kommradHomer - що значення має підтримка часового поясу для вас (або інших людей, особливо під час підключення localhost)?
warren

1
@warren ні, я не з'єднував localhost в моєму випадку
kommradHomer

1
Як визначити, яка бібліотека встановлена ​​для підключення до бази даних?
posfan12

18

Як драйвер 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.

Тож як підключитися до mysql з oursql?

Дуже схожий на 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 - це хороший вибір, про що вже говорилося в інших відповідях.


4
Я не розумію, що "працює на python 3.x". Я просто спробував встановити його, і setup.py вибухнув, оскільки він навіть не використовує сумісні Python 3 дзвінки для друку. Звучало чудово, поки я насправді не спробував це.
otakucode

15

Запустіть цю команду у своєму терміналі, щоб встановити роз'єм 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 / ...

1
Деякі хлопці вже відповіли на ваше запитання. Ви просто забули запустити mydb.commit()після вставки значення в таблицю
Шерзод

13

SqlAlchemy


SQLAlchemy - це інструментарій Python SQL та Object Relational Mapper, який надає розробникам додатків повну потужність та гнучкість SQL. SQLAlchemy забезпечує повний набір добре відомих моделей стійкості на рівні підприємства, розроблених для ефективного та високоефективного доступу до бази даних, адаптованого до простої та піфонічної мови домену.

Установка

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):
    __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()

11

Незважаючи на всі відповіді, наведені вище, якщо ви не хочете підключитися до певної бази даних заздалегідь, наприклад, якщо ви хочете створити базу даних все-таки (!), Ви можете використовувати 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()

8

MySQLdb - це прямий шлях. Ви можете виконувати SQL запити через з'єднання. Період.

Мій кращий спосіб, який також є пітонічним, - використовувати замість цього могутню SQLAlchemy . Ось підручник, пов’язаний із запитом , і ось підручник щодо можливостей ORM SQLALchemy.


1
Посилання мертві, чи можете ви дізнатися про це та оновити правильне посилання?
Naveen Vijay

6

для 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()

ось профіль 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: введіть тут опис зображення

Отже, здається, що mysqlclient набагато швидше, ніж pymysql


6

Незважаючи на те, що хтось із вас може відзначити це дублікатом і засмутитися тим, що я копіюю чужу відповідь, я дійсно хотів би виділити аспект відповіді пана Напіка. Оскільки я пропустив це, я спричинив простої загальнонаціонального веб-сайту (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


6

Найкращий спосіб підключитися до MySQL з python - це використовувати MySQL Connector / Python, оскільки це офіційний драйвер Oracle для MySQL для роботи з Python, і він працює як з Python 3, так і з Python 2.

виконайте вказані нижче кроки для підключення MySQL

  1. встановити з'єднувач за допомогою pip

    pip install mysql-connector-python

або ви можете завантажити інсталятор з https://dev.mysql.com/downloads/connector/python/

  1. Використовуйте connect()метод з'єднання mysql python для підключення до MySQL.pass потрібного аргументу до connect()методу. тобто хост, ім’я користувача, пароль та ім’я бази даних.

  2. Створіть cursorоб'єкт із об’єкта з'єднання, повернутого connect()методом для виконання 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 ("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)щоб отримати дані


Ви * підключені до ...
Джон Форбс

5

Просто модифікація у відповіді вище. Просто запустіть цю команду, щоб встановити mysql для python

sudo yum install MySQL-python
sudo apt-get install MySQL-python

пам’ятайте! Він враховує регістри.


Я встановив MySQL-python через yum install. Установка була завершена, але я не можу імпортувати модуль MySQLdb. Він говорить, що такого модуля немає. Будь-яка ідея, чому це так?
користувач3527975

Незрозуміло, яку відповідь ви маєте на увазі, коли говорите «вище відповіді». Будь ласка, зробіть свою відповідь повною самою собою. Якщо ви хочете посилатися на інші відповіді, будь ласка, посилання на конкретну відповідь.
Flimm

5

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


+1 за пропозицію найшвидшого рішення для python 3. Однак mysql.connectorі _mysqlдайте і помилку імпорту (хоча другий варіант повинен працювати відповідно до документації). import MySQLdbпрацює, а потімMySQLdb.connect...
Сузана

3

Також погляньте на Шторм . Це простий інструмент для відображення 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

Для отримання додаткової інформації дивіться підручник .


2

Це з'єднання 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()

1

спочатку встановіть драйвер

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

ви можете підключити свій python-код до mysql таким чином.

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

cursor = db.cursor()

1

Спочатку встановіть драйвер (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 ()

0

Для пітона 3.3

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

У мене на моєму Windows 7 встановлений pip, просто встановіть pip cymysql

(вам не потрібен цитон) швидкий і безболісний


3
Ви можете створити нове запитання про SO та прокоментувати тут посилання на нього.
Лазик

-1

Спочатку встановіть роз'єм python-mysql з https://dev.mysql.com/downloads/connector/python/

на консолі Python введіть:

pip install mysql-connector-python-rf
import mysql.connector

1
Питання було трохи занадто широким, але ця відповідь здається трохи надто вузькою (принаймні в тому сенсі, що встановити та імпортувати модуль самостійно не обійдеться). Також здається, що оболонка та пітон змішуються в одному кодовому блоці без будь-яких пояснень або натякають wrt, що йде куди і що робити.
Ондрей К.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.