SQL Alchemy:添加会话时出现SQL语法错误

时间:2013-08-15 21:40:38

标签: python sqlalchemy

当我尝试使用SQLAlchemy的会话执行添加时,我当前遇到了以下错误。

sqlalchemy.exc.ProgrammingError: (ProgrammingError) (1064, "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '%s)' at line 1") b'INSERT INTO ctr_status (`Name`) VALUES (%s)' ('Test',)

以下是代码:

from sqlalchemy import MetaData, Table
from sqlalchemy import create_engine, orm

# Login omitted...

url = 'mysql+mysqldb://{user}:{password}@{host}:{port}/{database}'.format(user=user, password=password, host=host, port=port, database=database)
e = create_engine(url, echo=True)
metadata = MetaData()
metadata.bind = e
metadata.create_all()
ctr_status = Table('ctr_status', metadata, autoload=True)

class CTRStatus(object):
    pass
orm.mapper(CTRStatus, ctr_status)
new_status = CTRStatus()
new_status.Name = 'Test'

session_maker = orm.sessionmaker(bind=e, autoflush=True, autocommit=False, expire_on_commit=True)
session = orm.scoped_session(session_maker)
session.add(new_status)

# Crash here at flush
session.flush()

我很困惑我做错了什么。我目前正在使用 MySQL 5.5 Python 3.3.2 SQLAlchemy-0.8.2.win32-py3.3。

以下是我一直关注的一些链接:

SQL Alchemy - Tutorial

SQL Alchemy - Sessions

1 个答案:

答案 0 :(得分:0)

我设法通过将适配器切换到OurSQL并更改网址以使用 mysql + oursql 来实现它。

我想补充说,让我的SQL工作在我的Python 3.3设置上是非常重要的。

  1. 我必须从初始下载的文件中删除 oursqlx / oursql.c ,以便Cython自动生成它。
  2. 我还必须手动修改setup.py,因为它指向 setup_windowsish()中mysql_root变量的错误注册表路径。从本质上讲,当前的实现似乎不支持MySQL Server 5.5,如果注册表路径在HKEY_CURRENT_USER而不是HKEY_LOCAL_MACHINE中,它也不支持。