2011-09-05 47 views
-2

當我運行以下程序時,出現令人生厭的語法錯誤。以下是錯誤:Python SQLAlchemy語法錯誤

File "Create_the_database.py", line 64 

^
SyntaxError: invalid syntax 

下面是代碼(長,但重複的那麼容易脫脂):

import sqlalchemy 
from sqlalchemy import * 

engine = create_engine('sqlite:///Users/benscholz/Dropbox/OmniCloud/omnicloud/dev.db') 
meta = MetaData() 
createUsersTable() 
createAccountsTable() 
createPasswordsTable() 
meta.bind = engine 
meta.create_all(engine) 

def createUsersTable(): 
    print("creating User Table") 
    users = Table('users', metadata, 
     Column('id', Integer, primary_key = True), 
     Column('username', String, nullable = False), 
     Column('email_address', String, nullable = False), 
     Column('first_name', String), 
     Column('full_name', String), 
     Column('join_date', DateTime)) 

def createAccountsTable(): 
    print("creating Accounts Table") 
    accounts = Table('accounts', metadata, 
     Column('user_id', ForeignKey('users.id')), 
     Column('facebook_username', String), 
     Column('email_username_1', String), 
     Column('email_username_2', String), 
     Column('email_username_3', String), 
     Column('email_username_4', String), 
     Column('email_username_5', String), 
     Column('twitter_username_1', String), 
     Column('twitter_username_2', String), 
     Column('twitter_username_3', String), 
     Column('klout_username', String), 
     Column('dropbox_username', String), 
     Column('box_username', String), 
     Column('flickr_username_1', String), 
     Column('flickr_username_2', String), 
     Column('instagram_username', String), 
     Column('disqus_username', String), 
     Column('stack_overflow_username', String)) 

def createPasswordsTable(): 
    print("creating Passwords Table") 
    passwords = Table('passwords', metadata, 
     Column('user_id', ForeignKey('users.id')), 
     Column('facebook_pass', String), 
     Column('email_pass_1', String), 
     Column('email_pass_2', String), 
     Column('email_pass_3', String), 
     Column('email_pass_4', String), 
     Column('email_pass_5', String), 
     Column('twitter_pass_1', String), 
     Column('twitter_pass_2', String), 
     Column('twitter_pass_3', String), 
     Column('klout_pass', String), 
     Column('dropbox_pass', String), 
     Column('box_pass', String), 
     Column('flickr_pass_1', String), 
     Column('flickr_pass_2', String), 
     Column('instagram_pass', String), 
     Column('disqus_pass', String), 
     Column('stack_overflow_pass', String)) 

該計劃是長64行,以便它似乎到達終點,並期望...什麼?

+0

換行符?製表符與空格?評論必須是十五個字符,所以這句話與我的評論完全無關。 –

+0

爲什麼用這種方式創建具有函數的表?使用SQLAlchemy,您只需在頂層定義您的表。您將需要稍後從其他代碼中引用它們。在這裏,你的表格定義在超出範圍時會消失。 – Keith

+0

@Carl我只使用我的文本編輯器(巧克力)顯示的標籤設置爲4個空格 – Chris

回答

1

它固定兩件事情後,我工作得很好。

  1. 變量元應該是元數據。 Table()的第二個參數引用了全局變量。
  2. 從createUsersTable()到metadata.create_all(引擎)的行應向下移動到底部。在定義它們之前不能調用函數。

至於語法錯誤,我猜這個文件在最後一行有些無效字符,不能打印在屏幕上。我的建議是刪除最後一行,然後重新鍵入。