Как правильно получить доступ к базе данных SQL в Python на примере Perl? - PullRequest
0 голосов
/ 30 марта 2020

Я пытаюсь получить доступ к этой базе данных sql на основе следующих строк perl.

my $phyloDB = DBI->connect("DBI:mysql:phylodb;host=mysql-lan-dev", "access", "access")
    or die "Unable to connect to database: $DBI::errstr";
my $db_taxstr = $phyloDB->prepare('SELECT a.taxonomy FROM contigs a, proteins b WHERE a.name = b.contig_name AND b.seguid = ? limit 1');
my $db_taxstr_sp = $phyloDB->prepare('SELECT taxonomy FROM contigs WHERE species = ? limit 1');

Я не совсем уверен, с чего начать, потому что я не знаю, если это вызывает указанный файл c или получает его с сервера. Я довольно плохо знаком с базами данных sql и предпочел бы загружать в базу данных sql и перемещаться по объектам в Python, чем спускаться по червоточине документации.

Я изучил https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_sql.html но я не уверен, с чего начать.

Как я могу загрузить в эту sql базу данных в Python?

Ответы [ 2 ]

0 голосов
/ 30 марта 2020

Используйте модуль sqlalchemy для Python. У него очень хорошая документация. Вы можете использовать его «руками» и как ORM.

pip install sqlalchemy ( or pip3 install sqlalchemy )

Затем импортируйте этот модуль в файл проекта.

>>> from sqlalchemy import create_engine
>>> engine = create_engine('mysql://user:pass@host/db')
>>> engine.execute("select 'Hello, World!'").scalar()
>>> u'Hello, World!'

Или:

>>> from sqlalchemy import Table, MetaData
>> meta = MetaData(bind=e, reflect=True)
>>> table = meta.tables['table']
>>> list(e.execute(table.select(table.c.id < 2)))
>>>    [(1, u'first row')]

Или:

>>> from sqlalchemy import orm
>>> class Table(object):
>>>...     pass
>>> orm.Mapper(Table, meta.tables['table'])
>>> s = orm.Session(bind=e)
>>> s.query(Table).filter(Table.id < 2).first().info
>>>    u'first row'
0 голосов
/ 30 марта 2020

Сначала установите py mysql

pip install --user pymysql

Затем запустите это в python.

import pymysql.cursors

# Connect to the database
connection = pymysql.connect(host='mysql-lan-dev',
                             user='access',
                             password='access',
                             db='phylodb',
                             charset='utf8mb4',
                             cursorclass=pymysql.cursors.DictCursor)

try:

    with connection.cursor() as cursor:
        # Read a single record
        sql = "SELECT a.taxonomy FROM contigs a, proteins b WHERE a.name = b.contig_name AND b.seguid = ? limit 1"
        cursor.execute(sql)
        result = cursor.fetchone()
        print(result)

        sql = "SELECT taxonomy FROM contigs WHERE species = ? limit 1"
        cursor.execute(sql)
        result = cursor.fetchone()
        print(result)

finally:
    connection.close()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...