各位前賢好,近期學習Django
連接MSSQL作為資料庫
但目前碰上一個問題懇請解惑:
Model.py
class Restaurant(models.Model):
name = models.CharField(max_length=20)
phone = models.CharField(max_length=15)
class Food(models.Model):
name = models.CharField(max_length=20)
restaurant = models.ForeignKey(Restaurant)
在Python shell下ORM語法建立資料:
from restaurant.models import Restaurant,Food
r = Restaurant.objects.create(name='吉意得餐廳',phone='02-123456')
這兩行都順利成功,但執行下列這行出錯:
f = Food.objects.create(name='炒青菜', restaurant = r)
→ 執行報錯:
The above exception was the direct cause of the following exception:
... py檔案細節錯誤 ...
django.db.utils.DatabaseError: (-2147352567, '發生例外狀況。', (0, 'Microsoft OLE DB Provider for SQL Server', '運算元類型衝突: ntext 與 decimal 不相容', None, 0, -2147217913), None)
錯誤有點多,但看起來好像SQL Server在插入foreign key資料時會產生錯誤
而如果依照此影片方式:https://youtu.be/1RkipG5YQO0?t=3m28s
DB改成SQL LITE,插入Foods的資料則不會出問題
語法應該是沒有錯才是~ 同樣語法在SQL LITE可以執行但MSSQL卻報錯
還是使用MSSQL作為資料庫,在python shell用ORM語法建立Foreign Key資料時,還需要設定什麼嗎~~?
先感謝各位解惑!!
應該是 restaurant = 1 吧
f = Food.objects.create(name='炒青菜', restaurant = 1)
http://django-mssql.readthedocs.io/en/latest/settings.html#provider
use_mars = True doesn’t always work properly with ‘SQLOLEDB’ and can result in the error “Cannot create new connection because in manual or distributed transaction mode.” if you try to filter a queryset with another queryset.
試試看改 provider 成 SQLCLI11 試試看。
或是把 MARS Connection=True 移掉。
你好~
provider 成 SQLCLI11
Runserver會報錯顯示:找不到提供者
MARS Connection=True移除
Runserver不會出錯,但foreign key資料一樣無法新增 (錯誤同樣)