2013-01-17 3 views
4

python3을 사용하면 pymysql을 사용하여 mysql에 연결할 수 있습니다. 모두 예상대로 작동합니다. 동봉 된 코드가 작동합니다.python3 sqlalchemy pymysql 연결 문자열

import pymysql 

conn = pymysql.connect(host='127.0.0.1', unix_socket='/home/jhgong/mysql/tmp/mysql.sock', user='root', passwd='my_pass', db='my_db', port='3333') 
cur = conn.cursor() 
cur.execute('select user from auth_users') 
for i in cur: 
    print(i) 

sqlalchemy와 pymysql을 연결하려고하면 기본 예제 문자열이 작동하지 않는 것 같습니다. 위의 예는 포트 번호와 unix_socket을 모두 선언하지 않으면 작동하지 않습니다.

아래에 제가 sqlalchemy를 연결하려고 시도했습니다. 소켓과 포트 번호가 모두 필요하다고 가정합니다. 나는 여분의 unix_socket 위치를 가진 해시로 피드하기 위해 connect_args를 사용했다. 기쁨이 없다.

동봉 된 snippit을 사용하면 오류가 발생합니다. 또는 나는 다음과 같은 오류가 conarg 해시의 데시벨없이

conarg = { 
    'unix_socket':'/home/jhgong/mysql/tmp/mysql.sock', 
    'db'   :'ice' 
} 
engine = create_engine('mysql+pymysql://root:[email protected]:3333/my_db', connect_args = conarg, echo=True) 
connection = engine.connect() 

는 :

>>> connection = engine.connect() 
2013-01-17 13:04:20,819 INFO sqlalchemy.engine.base.Engine b'SELECT DATABASE()' 
2013-01-17 13:04:20,819 INFO sqlalchemy.engine.base.Engine() 
Traceback (most recent call last): 
    File "/nfs/site/home/jhgongx/.local/lib/python3.2/site-packages/SQLAlchemy-0.8.0b1dev-py3.2.egg/sqlalchemy/pool.py", line 724, in _do_get 
    return self._pool.get(wait, self._timeout) 
    File "/nfs/site/home/jhgongx/.local/lib/python3.2/site-packages/SQLAlchemy-0.8.0b1dev-py3.2.egg/sqlalchemy/util/queue.py", line 163, in get 
    raise Empty 
sqlalchemy.util.queue.Empty 

During handling of the above exception, another exception occurred: 

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/nfs/site/home/jhgongx/.local/lib/python3.2/site-packages/SQLAlchemy-0.8.0b1dev-py3.2.egg/sqlalchemy/engine/base.py", line 1574, in connect 
    return self._connection_cls(self, **kwargs) 
    File "/nfs/site/home/jhgongx/.local/lib/python3.2/site-packages/SQLAlchemy-0.8.0b1dev-py3.2.egg/sqlalchemy/engine/base.py", line 58, in __init__ 
    self.__connection = connection or engine.raw_connection() 
    File "/nfs/site/home/jhgongx/.local/lib/python3.2/site-packages/SQLAlchemy-0.8.0b1dev-py3.2.egg/sqlalchemy/engine/base.py", line 1637, in raw_connection 
    return self.pool.unique_connection() 
    File "/nfs/site/home/jhgongx/.local/lib/python3.2/site-packages/SQLAlchemy-0.8.0b1dev-py3.2.egg/sqlalchemy/pool.py", line 182, in unique_connection 
    return _ConnectionFairy(self).checkout() 
    File "/nfs/site/home/jhgongx/.local/lib/python3.2/site-packages/SQLAlchemy-0.8.0b1dev-py3.2.egg/sqlalchemy/pool.py", line 398, in __init__ 
    rec = self._connection_record = pool._do_get() 
    File "/nfs/site/home/jhgongx/.local/lib/python3.2/site-packages/SQLAlchemy-0.8.0b1dev-py3.2.egg/sqlalchemy/pool.py", line 744, in _do_get 
    con = self._create_connection() 
    File "/nfs/site/home/jhgongx/.local/lib/python3.2/site-packages/SQLAlchemy-0.8.0b1dev-py3.2.egg/sqlalchemy/pool.py", line 187, in _create_connection 
    return _ConnectionRecord(self) 
    File "/nfs/site/home/jhgongx/.local/lib/python3.2/site-packages/SQLAlchemy-0.8.0b1dev-py3.2.egg/sqlalchemy/pool.py", line 284, in __init__ 
    exec_once(self.connection, self) 
    File "/nfs/site/home/jhgongx/.local/lib/python3.2/site-packages/SQLAlchemy-0.8.0b1dev-py3.2.egg/sqlalchemy/event.py", line 362, in exec_once 
    self(*args, **kw) 
    File "/nfs/site/home/jhgongx/.local/lib/python3.2/site-packages/SQLAlchemy-0.8.0b1dev-py3.2.egg/sqlalchemy/event.py", line 379, in __call__ 
    fn(*args, **kw) 
    File "/nfs/site/home/jhgongx/.local/lib/python3.2/site-packages/SQLAlchemy-0.8.0b1dev-py3.2.egg/sqlalchemy/engine/strategies.py", line 168, in first_connect 
    dialect.initialize(c) 
    File "/nfs/site/home/jhgongx/.local/lib/python3.2/site-packages/SQLAlchemy-0.8.0b1dev-py3.2.egg/sqlalchemy/dialects/mysql/base.py", line 2005, in initialize 
    default.DefaultDialect.initialize(self, connection) 
    File "/nfs/site/home/jhgongx/.local/lib/python3.2/site-packages/SQLAlchemy-0.8.0b1dev-py3.2.egg/sqlalchemy/engine/default.py", line 183, in initialize 
    self._get_default_schema_name(connection) 
    File "/nfs/site/home/jhgongx/.local/lib/python3.2/site-packages/SQLAlchemy-0.8.0b1dev-py3.2.egg/sqlalchemy/dialects/mysql/base.py", line 1970, in _get_default_schema_name 
    return connection.execute('SELECT DATABASE()').scalar() 
    File "/nfs/site/home/jhgongx/.local/lib/python3.2/site-packages/SQLAlchemy-0.8.0b1dev-py3.2.egg/sqlalchemy/engine/base.py", line 645, in execute 
    params) 
    File "/nfs/site/home/jhgongx/.local/lib/python3.2/site-packages/SQLAlchemy-0.8.0b1dev-py3.2.egg/sqlalchemy/engine/base.py", line 791, in _execute_text 
    statement, parameters 
    File "/nfs/site/home/jhgongx/.local/lib/python3.2/site-packages/SQLAlchemy-0.8.0b1dev-py3.2.egg/sqlalchemy/engine/base.py", line 854, in _execute_context 
    context) 
    File "/nfs/site/home/jhgongx/.local/lib/python3.2/site-packages/SQLAlchemy-0.8.0b1dev-py3.2.egg/sqlalchemy/engine/default.py", line 342, in do_execute 
    cursor.execute(statement, parameters) 
    File "/nfs/site/home/jhgongx/.local/lib/python3.2/site-packages/PyMySQL3-0.5-py3.2.egg/pymysql/cursors.py", line 105, in execute 
    query = query % escaped_args 
TypeError: unsupported operand type(s) for %: 'bytes' and 'tuple' 

비어 풀 큐에 오류가 제기 될 것으로 보인다. 풀 대기열의 크기 나 유형을 설정해도 아무 효과가 없습니다.

이것을 알아내는 방법에 대한 제안 사항은 무엇입니까? 파이썬 3

import sqlalchemy 
from sqlalchemy.sql import select 
from sqlalchemy import Table, MetaData 


def init(): 
    try: 
     server = 'xx' 
     db = 'xx' 
     login = 'xx' 
     passwd = 'xx' 
     engine_str = 'mysql+mysqlconnector://{}:{}@{}/{}'.format(login, passwd, server, db) 
     engine = sqlalchemy.create_engine(engine_str, echo=False, encoding='utf-8') 
     connection = engine.connect() 
     metadata = MetaData() 
     t_servers = Table('your_table_here', metadata, autoload=True, autoload_with=engine) 
     s = select([t_servers]) 
     result = connection.execute(s) 
     for row in result: 
      print(row['the_field']) 
    except Exception: 
     raise 
    finally: 
     connection.close() 
if __name__ == '__main__': 
    init() 

MySQL의 커넥터 :

답변

0

이 매우 간단한 예제를보십시오 나는이 말을 알고 download here

0

을하지만 CPython의 3.2 (사용하고 같은 PyMySQL requirements 언급 CPython >= 2.6 or >= 3.3, 그것은 보인다 파이썬의 기본 버전이 사용됨) 문제가 될 수 있습니다.