python - tutorial - xampp




كيف يمكنني الاتصال بقاعدة بيانات MySQL في بيثون؟ (10)

كيف يمكنني الاتصال بقاعدة بيانات MySQL باستخدام برنامج python؟


التوقف عن استخدام MySQLDb إذا كنت ترغب في تجنب تثبيت رؤوس mysql فقط للوصول إلى mysql من python.

استخدم pymysql . يفعل كل ما يفعله MySQLDb ، ولكن تم تنفيذه بامتياز في بايثون بدون أي تبعيات خارجية . هذا يجعل عملية التثبيت على جميع أنظمة التشغيل متسقة وسهلة. pymysql هو انخفاض في استبدال MySQLDb و IMHO لا يوجد أي سبب لاستخدام MySQLDb على الإطلاق لأي شيء ... على الإطلاق! - PTSD from installing MySQLDb on Mac OSX and *Nix systems ، لكن هذا أنا فقط.

التركيب

pip install pymysql

هذا كل شيء ... أنت مستعد للعب.

استخدام مثال من pymysql جيثوب ريبو

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

أيضا - استبدال MySQLdb في التعليمات البرمجية الموجودة بسرعة وشفافية

إذا كان لديك رمز موجود يستخدم MySQLdb ، فيمكنك استبداله بسهولة باستخدام pymysql باستخدام هذه العملية البسيطة:

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

سوف تستخدم كافة المراجع اللاحقة إلى MySQLdb pymysql بشفافية.


SqlAlchemy

SQLAlchemy هي مجموعة أدوات Python SQL و Object Relational Mapper التي تمنح مطوري التطبيقات القدرة الكاملة والمرونة لـ SQL. يوفر SQLAlchemy مجموعة كاملة من أنماط استمرارية معروفة على مستوى المؤسسة ، مصممة للوصول إلى قاعدة بيانات فعالة وعالية الأداء ، وتكييفها إلى لغة نطاق بسيطة و Pythonic.

التركيب

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>/smsmagic")
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>/smsmagic")
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()

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


ألقِ نظرة أيضًا على العاصفة . وهو أداة بسيطة لرسم الخرائط 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

لمزيد من المعلومات ، راجع tutorial .


إذا لم تكن بحاجة إلى MySQLdb ، ولكنك تقبل أي مكتبة ، فإنني أوصي جدا جدا MySQL Connector / Python من MySQL: http://dev.mysql.com/downloads/connector/python/ .

إنها حزمة واحدة (حوالي 110 كيلوبايت) ، بيثون نقية ، لذلك فهي مستقلة عن النظام ، وسهلة التثبيت. عليك فقط تحميل ، انقر نقرا مزدوجا ، وتأكيد اتفاق الترخيص والذهاب. ليست هناك حاجة ل 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()

إليك طريقة واحدة للقيام بذلك:

#!/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()

مرجع هنا


على الرغم من جميع الإجابات المذكورة أعلاه ، في حالة عدم رغبتك في الاتصال بقاعدة بيانات محددة مسبقًا ، على سبيل المثال ، إذا كنت ترغب في إنشاء قاعدة البيانات (!) ، يمكنك استخدام 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()

كسائق ديسيبل ، هناك أيضا oursql . بعض الأسباب المذكورة على هذا الرابط ، والتي تقول لماذا oursql أفضل:

  • oursql لديه المعلمات الحقيقية ، وإرسال SQL والبيانات إلى MySQL بشكل منفصل.
  • يسمح oursql بتبادل النصوص أو البيانات الثنائية في قاعدة البيانات ويتم بثها خارج قاعدة البيانات ، بدلاً من طلب تخزين كل شيء في العميل.
  • يمكن oursql إدراج الصفوف بكسل وجلب صفوف lazily.
  • oursql لديه دعم يونيكود على افتراضيا.
  • ويدعم oursql الثعبان 2.4 حتى 2.7 بدون أي تحذيرات لإيقاف التشغيل على 2.6+ (انظر PEP 218) وبدون فشل تام في 2.7 (انظر PEP 328).
  • يتم تشغيل oursql أصلاً على 3.x python.

لذلك كيفية الاتصال إلى 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 خيارًا جيدًا ، كما سبق ذكره في الإجابات الأخرى.


مجرد تعديل في الجواب أعلاه. ببساطة ، قم بتشغيل هذا الأمر لتثبيت mysql لـ python

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

تذكر! إنها حساسة لحالة الأحرف.


يدعم Oracle (MySQL) الآن موصل Python النقي. هذا يعني عدم تثبيت الثنائيات: إنها مكتبة Python فقط. يطلق عليه "رابط / بايثون".

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





mysql