這是我的第一個問題接受作爲參數的文本字符串時,奇怪的行爲。的Django +南+的Python:使用功能
我試圖執行在Django一個SQL查詢(向南遷移):
from django.db import connection
# ...
class Migration(SchemaMigration):
# ...
def transform_id_to_pk(self, table):
try:
db.delete_primary_key(table)
except:
pass
finally:
cursor = connection.cursor()
# This does not work
cursor.execute('SELECT MAX("id") FROM "%s"', [table])
# I don't know if this works.
try:
minvalue = cursor.fetchone()[0]
except:
minvalue = 1
seq_name = table + '_id_seq'
db.execute('CREATE SEQUENCE "%s" START WITH %s OWNED BY "%s"."id"', [seq_name, minvalue, table])
db.execute('ALTER TABLE "%s" ALTER COLUMN id SET DEFAULT nextval("%s")', [table, seq_name + '::regclass'])
db.create_primary_key(table, ['id'])
# ...
我用這個函數是這樣的:
self.transform_id_to_pk('my_table_name')
所以應該:
- 找到的最大的存在ID或0(崩潰)
- 創建序列南Ë
- 創建序列
- 更新的ID字段使用序列
- 更新ID作爲PK
但它崩潰和錯誤說:
File "../apps/accounting/migrations/0003_setup_tables.py", line 45, in forwards
self.delegation_table_setup(orm)
File "../apps/accounting/migrations/0003_setup_tables.py", line 478, in delegation_table_setup
self.transform_id_to_pk('accounting_delegation')
File "../apps/accounting/migrations/0003_setup_tables.py", line 20, in transform_id_to_pk
cursor.execute(u'SELECT MAX("id") FROM "%s"', [table.encode('utf-8')])
File "/Library/Python/2.6/site-packages/django/db/backends/util.py", line 19, in execute
return self.cursor.execute(sql, params)
psycopg2.ProgrammingError: relation "E'accounting_delegation'" does not exist
LINE 1: SELECT MAX("id") FROM "E'accounting_delegation'"
^
我已經縮短了文件路徑以方便使用。
是什麼 「E'accounting_delegation'」 是什麼意思?我怎麼能擺脫它?
謝謝!
卡洛斯。
我不得不說我是新來的python,django,南... – carlosescri 2010-04-14 11:18:26