подключение сервера sql с использованием веб-сервисов amazon к python [duplicate]

Чтобы использовать методы и член объекта, вам сначала нужно создать этот объект. Если вы его не создали (переменная, которая должна содержать объект, не инициализируется), но вы пытаетесь использовать его методы или переменные, вы получите эту ошибку.

Иногда вы можете просто забыть инициализировать .

Отредактировано: new не может вернуть значение null, но исключение огня при ошибке. Давно это было на некоторых языках, но не больше. Спасибо @John Saunders за указание на это.

980
задан George Stocker 28 July 2011 в 18:48
поделиться

21 ответ

Подключение к MYSQL с помощью Python за 3 шага

1 - Настройка

Перед выполнением чего-либо вы должны установить драйвер MySQL. В отличие от PHP, по умолчанию с помощью Python установлен только драйвер SQLite. Наиболее используемый пакет для этого - MySQLdb , но его сложно установить с помощью easy_install.

Для пользователя Windows вы можете получить exe из MySQLdb ,

Для Linux это случайный пакет (python-mysqldb). (Вы можете использовать sudo apt-get install python-mysqldb (для дистрибутивов на основе debian), yum install MySQL-python (для rpm-based) или dnf install python-mysql (для современного fedora distro) в командной строке для загрузки.)

Для 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).

1136
ответ дан 21 revs, 17 users 71% 1 September 2018 в 04:55
поделиться

SqlAlchemy


SQLAlchemy - это инструментарий Python SQL и реляционный сопоставление объектов, который дает разработчикам приложений полную мощность и гибкость 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()
7
ответ дан anand tripathi 1 September 2018 в 04:55
поделиться

В качестве драйвера db существует также oursql . Некоторые из причин, перечисленных в этой ссылке, говорят о том, почему oursql лучше:

  • oursql имеет реальную параметризацию, посылая SQL и данные в MySQL полностью отдельно.
  • oursql позволяет передавать текстовые или двоичные данные в базу данных и выводиться из базы данных, а не требовать, чтобы все было буферизировано в клиенте.
  • oursql может лениво вставлять строки и извлекать строки лениво.
  • По умолчанию ussql поддерживает Unicode.
  • oursql поддерживает python с 2.4 по 2.7 без каких-либо предупреждений об отказе от версии 2.6+ (см. PEP 218) и без полного отказа от 2.7 (см. PEP 328) .
  • oursql запускается изначально на python 3.x.

Итак, как подключиться к mysql с oursql?

Очень похоже to 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 - хороший выбор, как уже упоминалось в других ответах.

18
ответ дан bool.dev 1 September 2018 в 04:55
поделиться

Для написания приложений баз данных на Python необходимо выполнить следующие пять шагов:

Импортировать SQL-интерфейс с помощью следующей команды:

>>> import MySQLdb

Установить соединение с базой данных с помощью следующую команду:

conn = MySQLdb.connect (host = 'localhost', user = 'root', passwd = '') ... где host - это имя ваш хост-компьютер, за которым следуют имя пользователя и пароль. В случае корня нет необходимости указывать пароль.

Создайте курсор для соединения со следующей командой:

>>>cursor = conn.cursor()

Выполните любой SQL-запрос, используя этот курсор, как показано ниже: здесь выходы в терминах показывают количество строк, затронутых этим запросом:

курсор. execute («Создать библиотеку базы данных») // Указывает, сколько строк затронуто

>>> cursor.execute('use Library')

>>>table='create table books(book_accno char(30) primary key, book_name
char(50),no_of_copies int(5),price int(5))'
>>> cursor.execute(table)

Наконец, выберите набор результатов и выполните итерацию по этому набору результатов. На этом этапе пользователь может получить результирующие наборы, как показано ниже:

>>> cursor.execute('select * from books')
>>> cursor.fetchall()

((«Py9098», «Программирование с помощью Python», 100L, 50L), («Py9099», «Программирование с Python ', 100L, 50L))

0
ответ дан Codemaker 1 September 2018 в 04:55
поделиться

Если вам не нужен MySQLdb, но я бы принял любую библиотеку, я бы очень, очень рекомендую MySQL Connector / Python из MySQL: http://dev.mysql.com/downloads/connector/python/ .

Это один пакет (около 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()
96
ответ дан Eric Leschinski 1 September 2018 в 04:55
поделиться

Вот один из способов сделать это:

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

Ссылка здесь

159
ответ дан gustafbstrom 1 September 2018 в 04:55
поделиться

вы можете связать свой код python с mysql таким образом.

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

cursor = db.cursor()
1
ответ дан Haider Ali 1 September 2018 в 04:55
поделиться

Сначала установите драйвер (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
ответ дан Hasib Kamal 1 September 2018 в 04:55
поделиться

Просто модификация выше ответа. Просто запустите эту команду, чтобы установить mysql для python

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

, помните! Это чувствительно к регистру.

6
ответ дан HMS 1 September 2018 в 04:55
поделиться

для Python3.6 Я нашел два драйвера: pymysql и mysqlclient. Я тестировал производительность между ними и получил результат: mysqlclient быстрее.

ниже - мой тестовый процесс (необходимо установить python lib profilehooks для анализа времени:

raw 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

1
ответ дан kai 1 September 2018 в 04:55
поделиться

Oracle (MySQL) теперь поддерживает чистый коннектор Python. Это означает, что нет двоичных файлов для установки: это просто библиотека Python. Он называется «Connector / Python».

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

107
ответ дан Ken Brown 1 September 2018 в 04:55
поделиться

Для python 3.3

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

У меня есть pip, установленный на моих окнах 7, просто pip установить cymysql

(вам не нужен cython) быстро и безболезненно

0
ответ дан Lazik 1 September 2018 в 04:55
поделиться

Несмотря на все ответы выше, если вы не хотите подключаться к определенной базе данных заранее, например, если вы хотите создать базу данных еще (!), вы можете использовать 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()
11
ответ дан Mahdi 1 September 2018 в 04:55
поделиться

Также посмотрите на Storm . Это простой инструмент сопоставления 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

Для получения дополнительной информации см. учебник .

3
ответ дан michip96 1 September 2018 в 04:55
поделиться

MySQLdb - это простой способ. Вы можете выполнить SQL-запросы по соединению. Период.

. Мой предпочтительный способ, который также является pythonic, заключается в использовании мощного SQLAlchemy . Вот учебник , связанный с запросом , и вот учебник по возможностям ORM SQLALchemy.

8
ответ дан muhuk 1 September 2018 в 04:55
поделиться

Попробуйте использовать MySQLdb

. Здесь есть страница: 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 ()
17
ответ дан nosklo 1 September 2018 в 04:55
поделиться

Остановить использование MySQLDb, если вы хотите избежать установки заголовков mysql только для доступа к mysql из python.

Используйте pymysql . Он выполняет все, что делает MySQLDb, но был реализован исключительно в Python с NO External Dependencies . Это делает процесс установки на всех операционных системах последовательным и легким. 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 прозрачно.

85
ответ дан Phillip 1 September 2018 в 04:55
поделиться

Сначала установите python-mysql-коннектор из https://dev.mysql.com/downloads/connector/python/

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

pip install mysql-connector-python-rf
import mysql.connector
-1
ответ дан Suraj Rao 1 September 2018 в 04:55
поделиться

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-питон

1
ответ дан Umer Farooq 1 September 2018 в 04:55
поделиться

Лучший способ подключения к 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. Добавьте необходимый аргумент в метод 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 ("Your 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() для продолжения изменений в DB
  • Для извлечения данных. Используйте cursor.execute() для запуска запроса и cursor.fetchall(), cursor.fetchone(), cursor.fetchmany(SIZE) для извлечения данных
0
ответ дан Vishal Hule 1 September 2018 в 04:55
поделиться

сначала установите драйвер

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
ответ дан Vishvajit Pathak 1 September 2018 в 04:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: