2017-03-19 2 views
0

ich sqlalchemy mit aiomysql auf Python 3.6 zu integrieren versuchen, ihr offizielles Beispiel unter Verwendung von hier auf github mein vollständiger Code istaiomysql und sqlalchemy einfaches Beispiel erzeugen Syntaxfehler auf Python 3.6

import sqlalchemy as sa 
import asyncio 
from aiomysql.sa import create_engine 

DB1 = dict(host="xxx",...) 
DB2 = dict(host="yyy",...) 

DATABASES = dict(db1=db1, db2=db2) 

async def get_engine(loop, configs): 
    configs = configs.copy() 
    configs['loop'] = loop 
    engine = await create_engine(**configs) 
    return engine 

class Engine(object): 
    __shared_state = {} 
    running = None 

    def __init__(self, loop): 
     print("init", Engine.running) 
     self.__dict__ = Engine.__shared_state 
     self.loop = loop 
     if not Engine.running: 
      self.ignite(loop) 

    def connect(self, key, configs, loop): 
     engine = loop.run_until_complete(get_engine(loop, configs)) 
     self.__dict__[key] = engine 

    def ignite(self, loop): 
     Engine.running = True 
     for key, configs in DATABASES.items(): 
      self.connect(key, configs, loop) 

def DoMyQueries(conn): 
    pass 

ioloop = asyncio.get_event_loop() 
engine = Engine(ioloop) 
async with engine.db1.acquire() as conn: 
    DoMyQueries(conn) 

engine.db1.close() 
await engine.wait_closed() 

aber ich erhalte den folgend Fehler

File "myfile.py", line 45 
    async with engine.db1.acquire() as conn: 
     ^
    SyntaxError: invalid syntax 

Was fehlt mir in meinem Code? Ich weiß, dass der Fehler ziemlich offensichtlich ist, aber wie kann ich das beheben?

Antwort

1

async with kann nur innerhalb auftreten async def . Ihren Code in einen async def main() bewegen und rufen es mit run_until_complete()