Jak połączyć się z bazą danych MySQL przy użyciu programu python?
pymysql
ponieważ według tego porównania jest to czysty darmowy Python .
Jak połączyć się z bazą danych MySQL przy użyciu programu python?
pymysql
ponieważ według tego porównania jest to czysty darmowy Python .
Odpowiedzi:
1 - Ustawienia
Aby cokolwiek zrobić, musisz zainstalować sterownik MySQL. W przeciwieństwie do PHP, tylko sterownik SQLite jest instalowany domyślnie w Pythonie. Najczęściej używanym pakietem do tego jest MySQLdb, ale trudno go zainstalować za pomocą easy_install. Uwaga: MySQLdb obsługuje tylko Python 2.
Dla użytkowników systemu Windows możesz uzyskać plik exe MySQLdb .
W przypadku systemu Linux jest to zwykły pakiet (python-mysqldb). (Możesz użyć sudo apt-get install python-mysqldb
(dla dystrybucji opartych na Debianie), yum install MySQL-python
(dla wersji opartych na RPM) lub dnf install python-mysql
(dla nowoczesnej dystrybucji Fedory) w linii poleceń do pobrania.)
W przypadku komputerów Mac możesz zainstalować MySQLdb za pomocą Macport .
2 - Wykorzystanie
Po instalacji uruchom ponownie. Nie jest to obowiązkowe, ale nie pozwoli mi odpowiedzieć na 3 lub 4 inne pytania w tym poście, jeśli coś pójdzie nie tak. Więc proszę zrestartować komputer.
To jest jak użycie dowolnego innego pakietu:
#!/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()
Oczywiście istnieje tysiące możliwości i opcji; to bardzo prosty przykład. Będziesz musiał zajrzeć do dokumentacji. Dobry punkt wyjścia .
3 - Bardziej zaawansowane wykorzystanie
Kiedy już wiesz, jak to działa, możesz użyć ORM, aby uniknąć ręcznego pisania SQL i manipulowania tabelami, ponieważ były to obiekty Pythona. Najbardziej znanym ORM w społeczności Python jest SQLAlchemy .
Radzę ci go używać: twoje życie będzie znacznie łatwiejsze.
Niedawno odkryłem inny klejnot w świecie Python: peewee . Jest to bardzo mała ORM, naprawdę łatwa i szybka w konfiguracji, a następnie w użyciu. To sprawia, że mój dzień dla małych projektów lub samodzielnych aplikacji, gdzie używanie dużych narzędzi, takich jak SQLAlchemy lub Django, jest przesadą:
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
Ten przykład działa od razu po wyjęciu z pudełka. Nie pip install peewee
jest wymagane nic oprócz posiadania peewee ( ).
pip install MySQL-python
Oto jeden ze sposobów, aby to zrobić, używając MySQLdb , który obsługuje tylko 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
. Jak korzystać z mysql z pythonem na hostingu współdzielonym. Jakaś alternatywa?
Oracle (MySQL) obsługuje teraz czysty łącznik Python. Oznacza to, że nie trzeba instalować plików binarnych: to tylko biblioteka Python. Nazywa się to „Connector / Python”.
Jeśli nie potrzebujesz MySQLdb, ale akceptujesz dowolną bibliotekę, bardzo, bardzo polecam MySQL Connector / Python z MySQL: http://dev.mysql.com/downloads/connector/python/ .
Jest to jeden pakiet (około 110k), czysty Python, więc jest niezależny od systemu i bardzo prosty w instalacji. Wystarczy pobrać, kliknąć dwukrotnie, potwierdzić umowę licencyjną i przejść. Nie trzeba używać Xcode, MacPorts, kompilacji, ponownego uruchamiania…
Następnie łączysz się jak:
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
będzie również działać. Nie widzę, gdzie jest napisane, że nie jest już obsługiwane w PyPi? Świetnie, jeśli nie masz dostępu do kompilatorów gcc / C w twoim systemie, a zatem nie możesz zainstalować mysqldb
.
pip search mysql-connector
aby znaleźć nazwę pakietu. odpowiedź stąd: stackoverflow.com/a/22829966/2048266
Przestań używać MySQLDb, jeśli chcesz uniknąć instalowania nagłówków mysql, aby uzyskać dostęp do mysql z python.
Użyj pymysql . Robi wszystko, co MySQLDb, ale zostało zaimplementowane wyłącznie w Pythonie, bez ZEWNĘTRZNYCH Zależności . Dzięki temu proces instalacji we wszystkich systemach operacyjnych jest spójny i łatwy. pymysql
to spadek w zastępstwie MySQLDb i IMHO, nie ma powodu, aby kiedykolwiek używać MySQLDb do czegokolwiek ... KIEDYKOLWIEK! - PTSD from installing MySQLDb on Mac OSX and *Nix systems
, ale to tylko ja.
Instalacja
pip install pymysql
To wszystko ... jesteś gotowy do gry.
Przykładowe użycie z repozytorium pithysql 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()
TAKŻE - Zamień MySQLdb w istniejącym kodzie szybko i przejrzyście
Jeśli masz istniejący kod, który używa MySQLdb, możesz łatwo zastąpić go pymysql, korzystając z tego prostego procesu:
# import MySQLdb << Remove this line and replace with:
import pymysql
pymysql.install_as_MySQLdb()
Wszystkie kolejne odwołania do MySQLdb będą używać przezroczystego pymysql.
Spróbuj użyć MySQLdb . MySQLdb obsługuje tylko Python 2.
Można tu znaleźć stronę: http://www.kitebird.com/articles/pydbapi.html
Ze strony:
# 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
)?
Jako sterownik db istnieje również naszsql . Niektóre z powodów wymienionych w tym linku, które mówią, dlaczego naszsql jest lepszy:
- oursql ma rzeczywistą parametryzację, wysyłając SQL i dane do MySQL całkowicie osobno.
- oursql umożliwia przesyłanie strumieniowe danych tekstowych lub binarnych do bazy danych i strumieniowanie z bazy danych, zamiast wymagać buforowania wszystkiego w kliencie.
- oursql może zarówno wstawiać wiersze leniwie, jak i pobierać wiersze leniwie.
- oursql ma domyślnie włączoną obsługę Unicode.
- oursql obsługuje Python 2.4 do 2.7 bez ostrzeżeń o wycofaniu w wersji 2.6+ (patrz PEP 218) i bez całkowitego niepowodzenia w wersji 2.7 (patrz PEP 328).
- oursql działa natywnie na Pythonie 3.x.
Bardzo podobny do 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]
Poradnik w dokumentacji jest całkiem przyzwoity.
I oczywiście dla ORM SQLAlchemy to dobry wybór, jak już wspomniano w innych odpowiedziach.
Uruchom to polecenie w swoim terminalu, aby zainstalować konektor mysql:
pip install mysql-connector-python
I uruchom to w swoim edytorze Python, aby połączyć się z MySQL:
import mysql.connector
mydb = mysql.connector.connect(
host="localhost",
user="yusername",
passwd="password",
database="database_name"
)
Próbki do wykonania poleceń MySQL (w edytorze Pythona):
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
Więcej poleceń: https://www.w3schools.com/python/python_mysql_getstarted.asp
mysql-connector
tylko z. stackoverflow.com/questions/59405740/…
mydb.commit()
po wstawieniu wartości do tabeli
SQLAlchemy to zestaw narzędzi Python SQL i Object Relational Mapper, który zapewnia programistom aplikacji pełną moc i elastyczność SQL. SQLAlchemy zapewnia pełny zestaw dobrze znanych wzorców trwałości na poziomie przedsiębiorstwa, zaprojektowanych z myślą o wydajnym i wydajnym dostępie do bazy danych, dostosowanym do prostego języka Python.
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()
Pomimo wszystkich powyższych odpowiedzi, na przykład, jeśli nie chcesz połączyć się z konkretną bazą danych z góry, na przykład jeśli chcesz nadal tworzyć bazę danych (!), Możesz użyć connection.select_db(database)
, jak pokazano poniżej.
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 to prosty sposób. Możesz wykonywać zapytania SQL przez połączenie. Kropka.
Mój preferowany sposób, który jest również pythonowy, polega na użyciu potężnego SQLAlchemy . Oto samouczek związany z zapytaniami , a tutaj samouczek na temat możliwości ORM SQLALchemy.
dla Python3.6 znalazłem dwa sterowniki: pymysql i mysqlclient. Przetestowałem wydajność między nimi i uzyskałem wynik: mysqlclient jest szybszy.
poniżej znajduje się mój proces testowy (musisz zainstalować haki profilu Pythona w celu analizy upływu czasu :
surowy sql: select * from FOO;
natychmiast wykonać w terminalu 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()
Wygląda więc na to, że mysqlclient jest znacznie szybszy niż pymysql
Chociaż niektórzy z was mogą oznaczyć to jako duplikat i denerwować się tym, że kopiuję odpowiedź kogoś innego, NAPRAWDĘ chciałbym podkreślić aspekt odpowiedzi pana Napika. Ponieważ mi tego brakowało, spowodowałem ogólnokrajowy przestój witryny (9 minut). Gdyby tylko ktoś udostępnił te informacje, mógłbym temu zapobiec!
Oto jego kod:
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()
Ważną rzeczą jest tu Spróbuj i wreszcie klauzula. Pozwala to na zamknięcie połączeń ZAWSZE , niezależnie od tego, co dzieje się w części kursora / sqlstatement kodu. Wiele aktywnych połączeń powoduje wzrost wartości DBLoadNoCPU i może spowodować awarię serwera db.
Mam nadzieję, że to ostrzeżenie pomoże uratować serwery i ostatecznie miejsca pracy! :RE
Najlepszym sposobem połączenia się z MySQL z Pythona jest użycie MySQL Connector / Python, ponieważ jest to oficjalny sterownik Oracle dla MySQL do pracy z Pythonem i działa zarówno z Python 3, jak i Python 2.
wykonaj poniższe czynności, aby połączyć MySQL
zainstaluj złącze za pomocą pip
pip install mysql-connector-python
lub możesz pobrać instalator ze strony https://dev.mysql.com/downloads/connector/python/
Użyj connect()
metody python konektora mysql, aby połączyć się z MySQL.pass wymaganym argumentem connect()
metody. tzn. host, nazwa użytkownika, hasło i nazwa bazy danych.
Utwórz cursor
obiekt z obiektu połączenia zwróconego connect()
metodą w celu wykonania zapytań SQL.
zamknij połączenie po zakończeniu pracy.
Przykład :
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()
Odniesienie - https://pynative.com/python-mysql-database-connection/
Ważne API MySQL Connector Python
W przypadku operacji DML - użyj cursor.execute()
i, cursor.executemany()
aby uruchomić zapytanie. a po tym użyj, connection.commit()
aby zachować zmiany w DB
Aby pobrać dane - wykorzystanie cursor.execute()
uruchomić kwerendę i cursor.fetchall()
, cursor.fetchone()
, cursor.fetchmany(SIZE)
aby pobrać dane
Tylko modyfikacja powyższej odpowiedzi. Wystarczy uruchomić to polecenie, aby zainstalować mysql dla Pythona
sudo yum install MySQL-python
sudo apt-get install MySQL-python
Zapamiętaj! Rozróżniana jest wielkość liter.
mysqlclient jest najlepszy, ponieważ inni zapewniają wsparcie tylko dla określonych wersji Pythona
pip install mysqlclient
przykładowy kod
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
i _mysql
dać zarówno błąd importu (choć druga opcja powinna działać zgodnie z dokumentacją). import MySQLdb
działa, a następnieMySQLdb.connect...
Zobacz także Storm . Jest to proste narzędzie do mapowania SQL, które pozwala łatwo edytować i tworzyć wpisy SQL bez pisania zapytań.
Oto prosty przykład:
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
Aby znaleźć i użyć obiektu:
michael = store.find(User, User.name == u"Michael").one()
print str(user.ID) # 10
Znajdź za pomocą klucza podstawowego:
print store.get(User, 1).name #Mark
Więcej informacji znajduje się w samouczku .
To jest połączenie DB MySQL
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()
najpierw zainstaluj sterownik
pip install MySQL-python
Następnie podstawowy kod wygląda następująco:
#!/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
w ten sposób możesz połączyć swój kod Pythona z mysql.
import MySQLdb
db = MySQLdb.connect(host="localhost",
user="appuser",
passwd="",
db="onco")
cursor = db.cursor()
Najpierw zainstaluj sterownik (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
Kody połączeń z bazą danych 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 ()
Dla Pythona 3.3
CyMySQL https://github.com/nakagami/CyMySQL
Mam pip zainstalowany na moim systemie Windows 7, wystarczy zainstalować pip cymysql
(nie potrzebujesz cytonu) szybko i bezboleśnie
Najpierw zainstaluj łącznik python-mysql z https://dev.mysql.com/downloads/connector/python/
w konsoli Python wpisz:
pip install mysql-connector-python-rf
import mysql.connector