2010-11-18 17 views
0
Engine = create_engine("mysql+mysqldb://blah-blah-blah", encoding="utf-8") 
Session = sessionmaker(bind = Engine) 
ses = Session() 
Meta = MetaData(bind = Engine, reflect = True) 
PersonTable = Meta.tables["person"] 

class Person(object): 
    pass 

mapper(Person, PersonTable) 
APerson = Person("1111", "2222", "1.01.1980") 
ses.add(APerson) 
ses.commit() 

sqlalchemy.exc.ProgrammingError: (ProgrammingError) (1064, "Eğer SQL sözdizimi bir hata var; 'yakın kullanma hakkı sözdizimi için MySQL sunucu sürümü ile uyumlu kılavuzu % s,% s,% s) 'satır 1'de') b'INSERT INTO person (Name, OriginalName, DoB) VALUES (% s,% s,% s) '(' 1111 ',' 2222 ', '25 .01 .1980 ')Python 3, SQLAlchemy, MySQL. INSERT deyiminde yanlış sözdizimi

% s nedir? Neyi yanlış yapıyorum?

Python 3.1 SQLAlchemy 0.6.5 MySQL 5.1 Windows 7 Ultimate

teşekkür ederiz.

+0

, her bir% s'nin sırasıyla '1111', '222' ve '25 .01.1980 'dize değerleri için alması beklenen bir C stili yazdırma işidir. Bu –

+0

düzeltmek yardımcı olmak için sqlalchemy bilmiyorum daha yakın olmasına rağmen burada benzer bir soru, umarım yararlı bir cevap olacaktır: http://stackoverflow.com/questions/14732533/pyramid-python3-sqlalchemy-and -mysql – Sheena

cevap

0

sqlalchemy commit'i, şema ile uyumlu olmayan bir insert sorgusu oluşturmaya çalışıyorsunuz. near '%s, %s, %s)', geçersiz veriler girmeye çalıştığınız anlamına gelir. Ben sadece tarih formatı olduğu için spekülasyon yapabilirim - bu uygun mysql tarih biçimi YYYY-MM-DD değil.

+0

"DoB" columb kaldırıldı, ama yardımcı olmadı. Aynı hata. (NULL 'ID' INT (11) NULL AUTO_INCREMENT, ' Name' VARCHAR (255), 'OriginalName' VARCHAR (255), birincil anahtar ('ID') ) TABLE' Person' CREATE MOTOR = InnoDB'nin; – Evgeni

0

Python 2.7'ye geri taşındım. Şimdi iyi çalışıyor.