2017-08-16 3 views
1

Ich kann STORED Procedure nicht von Django aufrufen. Ich kann das vom normalen python Programm aufrufen. Beispielarbeits python CodeDjango Pyodbc Gespeicherte Prozedur nicht alle Argumente während der Formatierung von Zeichenfolgen konvertiert 1 - Sql Server

cursor = connect.cursor() 
params=('IBM','2016') 
cursor.execute("EXEC SP_Competitor_Extract ?, ? ",params) 

Dieses Stück Code funktioniert gut. Aber wenn ich versuche, von Django auszuführen, funktioniert es nicht.

def index(request): 
    cursor = connection.cursor() 
    try: 
     params=["IBM", "2015"] 
     cursor.execute("{call SP_Competitor_Extract (?,?)}",params) 
     while cursor.nextset(): 
      try: 
       results={'results':cursor.fetchall()} 
       break 
      except pyodbc.ProgrammingError: 
       continue 

Dies gibt mir die Fehlermeldung not all arguments converted during string formatting

enter image description here

+0

umfassen die vollständige Rückverfolgung der Fehler –

+0

Datei "C: \ Benutzer \ eindswa \ AppData \ Local \ Programme \ Python \ Python35-32 \ lib \ site-packages \ sql_server \ Pyodbc \ base.py" in format_sql 509. sql = sql% tuple ('?' * Len (params)) Ausnahmetyp: TypeError at/DS_LAB_4/ Ausnahmewert: Nicht alle Argumente wurden während der Zeichenfolgenformatierung konvertiert –

Antwort

0

Es funktioniert jetzt in PYodbc gibt es keine . Sie können das Argument direkt übergeben. Sie brauchen den Platzhalter nicht. In meinem Fall cursor.execute("{call SP_Competitor_Extract IBM,2016}") gearbeitet. Ich bekomme alle Werte als variable und Erstellen der SQL. cursor.execute(SQL)

0

Djangos interne .cursor() Methode von Pyodbc Methode unterscheidet. Versuchen Sie folgendes:

cursor.execute(
    "EXEC SP_Competitor_Extract %s, %s", 
    [params] 
) 

Für weitere Informationen, die Dokumentation deckt auch hier: https://docs.djangoproject.com/en/1.11/topics/db/sql/#executing-custom-sql-directly

Die andere Option connection von pyodbc zu importieren und eine Verbindung manuell erstellen, wie Sie in Python zu tun, mit Ihrem Django DATABASES Einstellungsvariablen. Viel Glück!

+0

Dies funktioniert nicht –

Verwandte Themen